应用程序被终止时的Android多活动任务



该应用程序有两项活动任务:

  • 任务1
    • ActivityA(发射器)
    • Activity B
  • 任务2
    • Activity C<----这就是示例中堆栈指向的位置

现在试试:

  1. 转到最近的应用程序转盘(在较新的手机中,单击主页按钮右侧的按钮即可知道)
  2. 刷出所有应用程序
  3. 您的应用程序将被终止,并创建一个新的Application实例(调用Application#onCreate()
  4. 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)

我理解(并测试),如果你为ActivityC提供一个图标和标签,比如:

<activity
    android:name=".ActivityC"
    android:label="Activity Title"
    android:icon="@drawable/ic_icon"
</activity>

你会在最近的应用程序转盘中看到2个应用程序(实际上是任务)。

现在我想,对于我的用例,我不应该使用不同的任务,因为从安卓的角度来看,它几乎被视为另一个应用程序。

任务是为独立作业创建的。这就是为什么说singleInstance和singleTask在新任务的ROOT启动活动(作为该特定任务的根活动)。因为当你点击Overview Screen中的一个任务时,Android系统需要一种启动任务的方式(在这种情况下,它需要一个启动器/根活动)。

所以,一旦你杀死了一个任务,它就不应该杀死另一个,因为用户稍后可能想切换独立应用程序任务,对吧?

但很难管理这种行为,因为你需要正确处理(主要是导航和用户体验)破坏性任务。所以,在你采取这种行动之前要三思而后行。安卓文档本身就是这么说的;

"其他模式——singleTask和singleInstance——不适合大多数应用程序,"

最新更新