3

该应用程序有 2 个活动任务:

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

现在试试:

  1. 转到最近的应用程序轮播(您可以通过单击较新手机中主页按钮右侧的按钮来了解)。
  2. 刷出所有应用程序。
  3. 您的应用程序被杀死并Application创建一个新实例(Application#onCreate()被调用)。
  4. Android 尝试显示TASK 2的 Activity C。

有趣的是,如果你在这里:

  • 任务1
    • ActivityA(发射器)
    • ActivityB <---- 这里

...并且您确实重复了该场景,您的应用程序被终止,并且 android 按我认为应该返回到主屏幕。

简而言之,看起来Android在杀死应用程序时并没有清除所有任务。这仅在那个非常精确的场景中是正确的。转到设置>应用程序>您的应用程序>强制停止,您会看到它确实清除了所有任务。

我们可以做些什么来强制 Android 在终止应用程序时终止所有任务?

4

2 回答 2

1

在查看了如何在 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 个应用程序(实际上是任务)。

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

于 2013-08-13T19:16:54.110 回答
1

任务是为独立工作创建的。这就是为什么说 singleInstance 和 singleTask 在新任务的根处启动 Activity(作为该特定任务的根 Activity)。因为当您单击概览屏幕中的一个任务时,Android 系统需要一种启动任务的方式(在这种情况下,它需要一个启动器/根活动)。

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

但是很难管理这种行为,因为您需要正确处理(主要是导航和用户体验)独立的任务。所以在你这样做之前要三思。Android文档本身就是这么说的;

“其他模式——singleTask 和 singleInstance——不适用于大多数应用程序,”

于 2015-12-25T08:38:25.787 回答