Intent Flag启动模式——Android群英传

来源:互联网 发布:电钢琴推荐 知乎 编辑:程序博客网 时间:2024/06/05 09:02

系统提供了两种方式设置一个Activity的启动模式:
一个是通过在AndroidMainifest文件中的属性android:launchMode来设置
standard:标准模式,谁启动了这个Activity,那么这个Actiivty就运行在启动它的那个Activiity所在的栈中。比如ActivityA启动了ActivityB(B是标准模式),那么B就会进入启动它那个A所在的栈中。若ApplicationContext去启动standard模式会报错,因为非Activity类型的Context并没有所谓的任务栈。
singleTop:栈顶复用模式,如果新Activity已经位于任务栈的栈顶,那么Activity不会被重新构建,同时它的onNewIntent方法会被回调,且onCreate、onStart不会被系统调用,因为它并没有发生改变。
singleTask:栈内复用模式,是一种单实例模式。默认有clearTop的效果,会导致栈内所在D上面的Activity全部出栈。TaskAffinity,任务相关性,主要和singleTask和allowTaskReparenting属性配对使用,标识了一个Activity所需要的任务栈的名字,默认情况下,为应用的包名。我们也可以为每个Activity都单独指定TaskAffinity属性,但必须不能和包名相同。
singleInstance:单实例模式,创建的Activity只能单独的位于一个任务栈中。
另一种就是本文要介绍的通过Intent的flag来设置。
1、intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
与android:launchMode=”singleTask”效果相同。
2、FLAG_ACTIVITY_SINFLE_TOP
与android:launchMode=”singleTop”效果相同。
3、FLAG_ACTIVITY_CLEAR_TOP
有此标记为的Activity,当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。 singleTask默认就有此标记位。
4、FLAG_ACTIVITY_NO_HISTORY
使用这种模式启动Activity,当该Activity启动其他Activity后,该Activity就消失了,不会保留在Activity栈中。如A-B,B中以这种模式启动C,C在启动D,则当前Activity栈为ABD

两种设置方式的区别:
1、优先级:第二种优先级要高于第一种。

原创粉丝点击