Activity的启动模式——笔记二

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43847987/article/details/96865592

四种启动模式

  • standard:标准模式——每次启动一个Activity都会重新创建一个新的实例。
  • singleTop:栈顶复用模式——已经位于栈顶的Activity不会重新创建,onNewIntent被回调,并取出当前请求的信息。
  • singletask:栈内复用模式——只要Activity在一个需要的任务中存在,那么多次启动此Activity都不会重新创建实例。
  • singleInstance:单实例模式——只能单独位于一个任务栈中。

在singleTask中提到了Activity的所需要的任务栈?既然要搞懂singleTask这个启动模式就一定得知道什么使所需要的任务栈。TaskAffinity,可以翻译为任务相关性。这个参数标识了一个Activity所需要的任务栈的名字。默认情况下所有Activity所需的任务栈的名字为应用的包名。当然我们可以为每个Activity都单独指定TaskAffinity属性,这个属性值必须不能和包名相同,否则就相当于没有指定。
当TaskAffinity和singleTask启动模式配对使用的时候,它是具有该模式的Activity的目前任务栈的名字,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中。

添加启动的模式的方法
方法1:通过AndroidMenifest指定启动模式,如下:

<activity
andriud:name=".MainActivity"
android:launchMode="singleTask"/>`

方法2:通过在Intent中设置标志位来为Activity指定启动模式

Intent intent=new Intent();
intent.setClass(MainActivity.class,SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

两种方式的优缺点:
方法二在优先级上比方法一要高,第一种方法无法直接为Activity设置FLAG_ACTIVITY_CLEAR_TOP标识,而第二种方法无法为Activity指定singleInstance模式。

Activity的Flags
FLAG_ACTIVITY_NEW_TASK——singleTask
FLAG_ACTIVITY_SINGLE_TOP——singleTop
FLAG_ACTIVITY_CLEAR_TOP——当Activity启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,一般和singleTask启动模式一起出现,在这种情况下,被启动Activity的实例如果已经存在,那么系统就会调用它的onNewIntent。如果被启动的Activity采用standard模式启动,那么连同它之上的Activity都要出栈,系统会创建新的Activity实例并放入栈顶。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS——具有这个标记的Activity不会出现在历史Activity的列表中,当某些情况下我们不希望用户历史列表回到我们的Activity的时候这个标记比较有用。等同于在XML中指定android:excludeFromRecents=“true”

猜你喜欢

转载自blog.csdn.net/weixin_43847987/article/details/96865592