您的位置:首页 > 移动开发 > Android开发

Android Activity 的四种启动模式

2017-06-25 12:08 225 查看

Acitivity 的启动模式

任务栈简介

栈 — 后进先出的线性表。一个 Android 应用通常包含多个 Activity ,各 Activity 之间通过 Intent 进行连接,而 Android 系统通过栈结构来保存 APPActivity ,栈底 Activity 是整个任务栈的发起者。当一个 APP 启动时,如果当前环境中不存在该 APP 的任务栈时,系统就会创建一个新的任务栈,此 APP 所启动的 Activity 都将在这个任务栈中被管理,这个栈也被称为 Task。一个 Task 中的 Activity 可以来自不同的 APP ,同一个 APPActivity 也可能不再一个 Task 中。

standard

Activity 的默认启动模式,在不进行显示的指定下,所有 Activity 都会自动使用此模式,每次启动都会创建一个新的实例,并位于任务栈栈顶。



singleTop

如果 Activity 指定启动模式为 singleTop 模式,那么在启动时,系统会先判断当前栈顶 Activity 是否是要启动的 Activity,如果是则直接使用,否则创建新的实例。此模式通常使用有接收到消息后显示的界面。此模式启动的 Activity 虽然不会创建新的实例,但是启动该 Activity 时回调用 onNewInten()方法。

singleTask

singleTask 模式与 singleTop 模式有些类似,singleTop 是检测栈顶元素是否是需要启动的 Activity ,而 singleTaks 是检测整个 Activity 栈中是否存在当前需要启动的 Activity ,如果存在则将该 Activity 置于栈顶,并同时将该 Activity 之上的 Activity 都销毁;如果没有,则创建新的实例。不过这里都是指在同一个 APP 中启动这个 singleTaskActivity,如果是其他程序已 singleTask 模式来启动这个 Activity ,那么将创建一个新的任务栈。需要注意的是,如果启动的模式为 singleTaskActivity 已经在后台的一个任务栈中,那么启动后,后台的任务栈将一起被切换至前台,参考线官网的图片可以更好理解这一过程。



Activity2 启动 ActivityY(singleTask模式) 时,ActivityY 所在的 Task 被切换至前台,且按返回键时,也会返回 ActivityY 所在 TaskActivity 。此模式通常可以用来退出整个应用,首先将主 Activity 设为 singleTask 模式,然后在退出的 Activity 中启动都主 Activity,并重写主 ActivityonNewIntent() 方法,方法中添加 finish() 方法即可。

singleInstance

此模式启动的 Activity 会出现在一个新的 Task 中,而且该 Task 中只存在这一个 Activity 。列如:如果应用 A 的任务栈中创建了 ActivityY 的实例,且启动模式为 singleInstance ,如果应用 B 也要启动 ActivityY ,则不需要创建,两个应用共享 ActivityY 的实例。

Intent Flag 启动模式

Intent.FLAG_ACTIVITY_NW_TASK

使用一个新的 Task 来启动一个 Activity ,但启动的每一个 Activity 都将在一个新的 Task 中,通常该 Flag 使用在从 Service 中启动 Activity

Intent.FLAG_ACTIVITY_SINGLE_TOP

此模式与指定 android:launchMode=”singleTop” 效果相同。

Intent.FLAG_ACTIVITY_CLEAR_TOP

此模式与指定 android:launchMode=”singleTask 效果相同。

总结

关于启动模式暂时写到这里,大家可以动手实践便于加深理解,合理的设置启动模式会让程序运行的更有效率,用户体验更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 启动模式