赞
踩
四种启动模式
在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”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。