【问题标题】:Android multiple activity tasks when application is killed应用程序被杀死时的Android多个活动任务
【发布时间】:2013-08-12 23:16:02
【问题描述】:

该应用有 2 个活动任务:

  • 任务 1
    • ActivityA(启动器)
    • ActivityB
  • 任务 2
    • Activity C

现在试试:

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

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

  • 任务 1
    • ActivityA(启动器)
    • ActivityB

...你确实重复了这个场景,你的应用程序被杀死,android 回到主屏幕,我认为它应该这样做。

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

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

【问题讨论】:

    标签: android android-activity android-recents


    【解决方案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 的角度来看,它几乎被视为另一个应用程序。

    【讨论】:

    • 我的应用中有相同的场景。但我想要像从最近或应用启动器图标重新打开应用程序时的行为,我希望任务 2 与 Activity C 作为我的最顶层活动。但是任务 1 的活动 B 在我的应用程序中变得可见。有什么解决办法吗?
    • 当我从通知中启动我的应用程序时,任务 1 的活动 B 将启动。但是在按下返回按钮后任务 2 的活动 C 变得可见,这是我不想要的。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-27
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 2013-01-15
      相关资源
      最近更新 更多