1、Activity启动提供了4种方式
Standard:标准模式
SingleTop:栈顶复用模式
SingleTask:栈内复用模式
SingleInstance:单例模式
2、关于Activity的管理方式:任务栈。任务栈采用的结构是:先进后出
3、关于启动模式的总结
(1)Standard
特点:
1)Activity的默认启动模式
2)每启动一次Activity,就会创建一个新的Activity示例 并且 置于栈顶
3)Activity A 以标准模式 启动Activity B,那么Activity B 就会进入到 A 的栈中 并且 处于栈顶
4)注意:因为ApplicationContext没有任务栈,故无法用标准模式启动任务栈。但是可以通过待请启动的Activity指定标记:FLAG_ACTIVITY_NEW_TASK,这时启动以后就创建一个新的任务栈。
(2)SingleTop
特点:
1)、若新建的Activity位于任务栈的栈顶,那么此Activity的实例就不会重建,而是重新应用栈顶的实例
2)调用实例的时候是不会调用onCreate()和onStart(),而是会调用onNewIntent()
(3)SingleTask
特点:
1)查看Activity想要的任务栈是否存在,若不存在则重建1个任务栈、创建该Activity实例 并且 置于栈中
2)若存在,则查看该Activity是否存在栈中,若存在,则将该Activity栈上方的所有Activity出栈。回调onNewIntent()
3)应用场景:首页
(4)SingleInstance
特点:
1)、直接创建1个新的任务栈 并且 将该Activity 放入新栈中
2)应用场景:比如多个界面都访问同一个Activity,那么这个Activity就可以设置成SingleInstance
4、启动模式的设置
方式1:在AndroidMainifest
<activity android:launchMode="启动模式"
//启动模式
//standard:标准模式
//singleTop:栈顶复用模式
//singleTask:栈内复用模式
//singleInstance:单例模式
</activity>
方式2:在代码中设置
Intent inten = new Intent (Activity_A.this,Activity_B.class);
intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Flag说明:
FLAG_ACTIVITY_SINGLE_TOP:SingleTop栈顶复用模式
FLAG_ACTIVITY_NEW_TASK:SingleTask栈内复用模式
FLAG_ACTIVITY_CLEAR_TOP:SingleTask默认有此标记效果,意义:清除位于其上层的所有Activity
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:标记此Activity不会出现在历史Activity的列表中,无法通过历史列表找到该Activity
从上面我们可以发现Intent 没有 设置 SingleInstance,所以两种方式还是有区别的:
区别:AndroidMainifest无法设定 FLAG_ACTIVITY_CLEAR_TOP,Intent无法设置SingleInstance