该应用程序有两项活动任务:
-
任务1
Activity
A(发射器)Activity
B
-
任务2
Activity
C<----这就是示例中堆栈指向的位置
现在试试:
- 转到最近的应用程序转盘(在较新的手机中,单击主页按钮右侧的按钮即可知道)
- 刷出所有应用程序
- 您的应用程序将被终止,并创建一个新的
Application
实例(调用Application#onCreate()
) - Android尝试显示任务2的活动C
有趣的是,如果你在这里:
-
任务1
Activity
A(发射器)Activity
B<----这里
你确实重复了这个场景,你的应用程序被杀了,安卓系统回到了主屏幕,我认为这是应该的。
简言之,Android在杀死应用程序时似乎并没有清除所有任务。这只有在非常精确的情况下才是正确的。转到"设置">"应用程序">"你的应用程序">Force Stop,你会看到它确实清除了所有任务。
我们能做些什么来迫使Android在杀死应用程序时杀死所有任务?
了解了Android SDK上最近的应用程序是如何处理的(请参阅此处的源代码第135行http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/com/android/systemui/recent/RecentTasksLoader.java?av=f#135)
我理解(并测试),如果你为Activity
C提供一个图标和标签,比如:
<activity
android:name=".ActivityC"
android:label="Activity Title"
android:icon="@drawable/ic_icon"
</activity>
你会在最近的应用程序转盘中看到2个应用程序(实际上是任务)。
现在我想,对于我的用例,我不应该使用不同的任务,因为从安卓的角度来看,它几乎被视为另一个应用程序。
任务是为独立作业创建的。这就是为什么说singleInstance和singleTask在新任务的ROOT启动活动(作为该特定任务的根活动)。因为当你点击Overview Screen中的一个任务时,Android系统需要一种启动任务的方式(在这种情况下,它需要一个启动器/根活动)。
所以,一旦你杀死了一个任务,它就不应该杀死另一个,因为用户稍后可能想切换独立应用程序任务,对吧?
但很难管理这种行为,因为你需要正确处理(主要是导航和用户体验)破坏性任务。所以,在你采取这种行动之前要三思而后行。安卓文档本身就是这么说的;
"其他模式——singleTask和singleInstance——不适合大多数应用程序,"