医院网站建设方案计划书,wordpress站点美化,浙江公司网站建设制作,大数据营销模型文章目录 生命周期返回栈Activity状态生命周期方法 启动模式standard模式singleTask模式singleTop模式singleInstance模式singleInstancePerTask模式配置方式 生命周期
返回栈
每个Activity的状态由它在Activity栈#xff08;又叫“回退栈back stack”#xff09;中的位置决… 文章目录 生命周期返回栈Activity状态生命周期方法 启动模式standard模式singleTask模式singleTop模式singleInstance模式singleInstancePerTask模式配置方式 生命周期
返回栈
每个Activity的状态由它在Activity栈又叫“回退栈back stack”中的位置决定是所有当前正在运行的Activity的后进先出集合。
当一个新的Activity启动时它会变为活动状态并被压入栈顶。
如果用户使用Back按钮进行回退或者前台Activiy以其他方式关闭了那么栈中的下一个Activity就会并外于活动状态。 Activity状态 活动状态 当 Activity 位于栈顶时它对于用户输入而言是一个可见且拥有焦点的前台 Activity。Android会不惜一切代价让它存活下来甚至会根据需要杀死栈中更底部的 Activity 所依附的应用以保障该Activity 所需的资源。当另一个 Activity 变为活动状态时这个 Activity 就会被暂停当变为不可见时它就会被停止。 暂停状态 在某些情况下Activity虽然可见但它并没有获得焦点。这时它就处于暂停状态。当应用在多窗口环境中使用时也可能会达到这种状态。在此环境中可能会出现多个应用同时可见但只有用户最后一次与之交互Activity 才会被认为处于活动状态。 当暂停时Activity 还被视为是活动的,但它不能再接收到用户的各种输入事件。甚至在极端的情况下Android还会杀死暂停状态下的 Activity来恢复处于活动状态的 Activity 所需要的资源。当一个 Activity 变得完全不可见时它就会处于停止状态而所有 Activity 在进入停止状态之前都要经历暂停状态以进行转换。 停止状态 当一个Activity不可见时它就进入了停止状态。此时Activity 将保存在内存中并保留所有的获态信息;然而当系统需要内存时它也就成可能被终止的候选者。 不活动状态 一个 Activity 在被杀死之后到被启动之前都处于不活动状态。不活动状态的Activity 已经从栈中移除需要重新启动才能再次显示和使用它们。
生命周期方法 三种生存期七个回调方法
onCreate
Activity第一次被创建时调用整个Activity生命周期只会调用一次。
初始化Activity并填充UI布局
onStart
Activity 即将变得可见时调用但不能交互
onResume
Activity 将开始与用户进行交互时调用。
onPause
系统准备开始另一个 Activity 时调用。此时 Activity 仍然可见但失去焦点。
onStop
Activity 不再可见时调用
onDestory
Activity 被销毁前调用。可能由系统或用户主动销毁 Activity。
onRestart
Activity 从停止状态重新启动前调用。
示例
第一次启动应用程序oncreate()-onStart()-onResume()-
切到后台onPause()-onStop()-
再次打开onRestart()-onStart()-onResume()-
切到后台并删除onPause()-onStop()-onDestory()
启动模式
standard模式
默认模式标准模式是默认的启动模式如果你在 AndroidManifest.xml 中没有指定启动模式那么默认使用标准模式。
每次启动新实例每次启动 Activity 时系统都会创建该 Activity 的新实例并将其放在任务堆栈的顶部。
无重用机制如果一个 Activity 已经存在并且你再次启动它系统不会重用已经存在的实例而是会创建一个新的实例。
singleTask模式
当跳到一个SingleTask模式的Activity时: 判断当前任务栈内是否已经有该Activity 如果没有则新建一个并正常入栈 如果已经有了则把该Activity上面的全部弹出将该Activity暴露在最上面 singleTop模式
栈顶复用
当跳到一个SingleTop模式的Actigity时
判断当前任务栈的栈顶是否是该Activity
如果栈顶不是则新建一个并正常入栈如果栈顶是直接复用栈顶的Activity不新建Activity singleInstance模式
当跳到一个singleInstance模式的Activity时 如果发现某任务栈已经有该Activity时直接复用不新建 如果还没有则直接新开辟一个栈新建该Activity入栈。专门盛放该Activity 独享一个任务栈 singleInstancePerTask模式 singleInstancePerTask 可以看作是 singleTask 的一个变种。 它允许同一个 Activity 在多个任务Task中有多个实例但每个实例都位于其所在任务的根位置。 结合 Intent.FLAG_ACTIVITY_MULTIPLE_TASK 和 Intent.FLAG_ACTIVITY_NEW_DOCUMENT每次启动这个 Activity 都会创建一个新的任务并将该 Activity 作为任务的根 Activity。 当你需要同一个 Activity 在多个任务中存在多个独立的实例时可以使用 singleInstancePerTask。每次启动该 Activity 都会创建一个新的任务这些任务彼此独立互不影响
配置方式
配置启动模式方式
在 AndroidManifest.xml 文件中配置
不写默认standard模式
activity android:name.MainActivityandroid:launchModesingleInstance
/activityactivity android:name.MainActivityandroid:launchModesingleTop
/activityactivity android:name.MainActivityandroid:launchModesingleTask
/activity通过 Intent 设置
所有启动activityB的intent都需要设置只对从activityA跳转到activityB这次生效
singleTask // 为ActivityA设置singleTask启动模式Intent intent new Intent(this, ActivityA.class);// 添加FLAG_ACTIVITY_CLEAR_TOP标志// 这个标志的作用是如果ActivityA已经在任务栈中存在那么将栈中位于ActivityA之上的所有Activity全部出栈使ActivityA成为栈顶Activityintent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// 添加FLAG_ACTIVITY_NEW_TASK标志// 这个标志表示将会为这个Intent启动一个新的任务栈。如果这个Intent的targetActivity属于一个已经存在的任务栈// 那么将会把这个targetActivity及其所有子Activity全部移动到一个新的任务栈中intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);singleTop Intent intent new Intent(this, ActivityA.class);// 添加FLAG_ACTIVITY_SINGLE_TOP标志// 当这个标志被设置后如果ActivityA已经在任务栈的顶部那么不会创建新的实例intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);SingleInstance没有对应的Flag
总结
启动模式描述Intent 标志位配置方式standard每次启动都会创建新实例。无AndroidManifest.xmlsingleTop栈顶复用Intent.FLAG_ACTIVITY_SINGLE_TOPAndroidManifest.xml 或 IntentsingleTask栈中复用Intent.FLAG_ACTIVITY_NEW_TASK Intent.FLAG_ACTIVITY_CLEAR_TOPAndroidManifest.xml 或 IntentsingleInstance独立任务栈无AndroidManifest.xml 配置singleInstancePerTask每个任务的根 Activity支持多个实例Intent.FLAG_ACTIVITY_MULTIPLE_TASK Intent.FLAG_ACTIVITY_NEW_DOCUMENTAndroidManifest.xml 配置 感谢您的阅读 如有错误烦请指正 参考 18-认识Activity的启动模式_哔哩哔哩_bilibili【Android】Activity的启动模式_在代码中指定启动另外一个activity的启动模式-CSDN博客《Android 高级编程第4版》《第一行代码》