深入讲解Android中Activity launchMode(4)

这个模式和singleTask差不多,因为他们在系统中都只有一份实例。唯一不同的就是存放singleInstance Activity实例的Task只能存放一个该模式的Activity实例。如果从singleInstance Activity实例启动另一个Activity,那么这个Activity实例会放入其他的Task中。同理,如果singleInstance Activity被别的Activity启动,它也会放入不同于调用者的Task中。

深入讲解Android中Activity launchMode

虽然是两个task,但是在系统的任务管理器中,却始终显示一个,即位于顶部的Task中。

深入讲解Android中Activity launchMode

另外当我们从任务管理器进入这个应用,是无法通过返回键会退到Task1的。

好在有办法解决这个问题,就是之前提到的taskAffinity="",为launchMode为singleInstance的Activity加入这个属性即可。

1 2 3 4 5 6   <activity android:name=".SingleInstanceActivity" android:label="singleInstance launchMode" android:launchMode="singleInstance" android:taskAffinity=""> </activity>  

再次运行修改的代码,查看任务管理器,这样的结果就合理了。

深入讲解Android中Activity launchMode

使用情况

这种模式的使用情况比较罕见,在Launcher中可能使用。或者你确定你需要使Activity只有一个实例。建议谨慎使用。

Intent Flags

除了在manifest文件中设置launchMode之外,还可以在Intnet中设置flag达到同样的效果。如下述代码就可以让StandardActivity已singleTop模式启动。

1 2 3   Intent intent = new Intent(StandardActivity.this, StandardActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent);  

关于Intent Flags这里暂不做重点介绍,具体可以参考

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a5769b3a5942a82ac3a8d25d7a2fa32a.html