【问题标题】:Keep task stack when opening singleInstance activity from recent apps screen从最近的应用程序屏幕打开 singleInstance 活动时保留任务堆栈
【发布时间】:2017-01-20 09:33:35
【问题描述】:

我的应用程序包含多个活动,主要活动(A)处于launchMode singleTop,每个over 活动都处于singleInstance 模式。

我选择了 singleInstance 来防止无限导航 如果我这样导航:A -> B -> C -> B -> C -> B -> C 后退动作会做:C -> B -> A

它按预期工作。

问题:如果我导航 A -> B 然后我打开应用程序最近屏幕,单击我的应用程序,显示活动 b(确定)但是如果我返回应用程序退出并返回到 android 主页(活动没有被破坏, 我总是可以打开 B 因为最近的应用程序屏幕)

如果我从最近的应用程序菜单打开应用程序,为什么任务历史记录不保留?

<activity
        android:name="A"
        android:label="@string/app_name"
        android:launchMode="singleTop"
        android:configChanges="orientation|screenSize"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchResultsActivity" />
    </activity>
    <activity
        android:configChanges="orientation|screenSize"
        android:name="B"
        android:label="B"
        android:launchMode="singleInstance"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>
    <activity
        android:configChanges="orientation|screenSize"
        android:name="C"
        android:label="C"
        android:launchMode="singleInstance"
        android:theme="@style/AppTheme.NoActionBar">
    </activity>

感谢您的帮助

【问题讨论】:

  • 这不可能“按预期工作”。如果不设置taskAffinity,设置launchMode="singleInstance" 是没有用的。请发布您如何从 A->B->C->B->C 过渡。如果您只是为每个转换调用startActivity(),那么您的任务中肯定会有多个 B 和 C 实例。

标签: android android-activity single-instance launchmode android-recents


【解决方案1】:

如果调用 singleInstance Activity,则会创建一个新任务。通过dumpsys,我们可以找到两个任务,但任务管理器中只显示一个任务。这可能是系统错误。如果 Activity B 设置了taskAffinity,那么任务管理器中可能会有两个任务。

由于您从 A 启动 singleInstance B,因此存在两个任务: 任务 1 包含活动 A,而任务 2 包含活动 B。

您从任务管理器中打开任务 2,其中仅包含一个单实例 Activity B,因此您无法返回到 Activity A。

使用返回按钮时效果很好,因为

无论 Activity 是在新任务中启动还是在与启动它的 Activity 相同的任务中启动,“后退”按钮始终会将用户带到上一个 Activity。

你可以从Developer Document: Tasks and Back Stack得到这个。

如果真的有必要,我建议你不要使用singleInstace模式。

【讨论】:

  • 启动模式 singleInstancesingleTask 如果未同时指定 taskAffinity,则不会像记录/预期的那样工作,因为 taskAffinity 胜过这些特殊启动模式。
  • @DavidWasser 是的,我认为这可能是系统错误。
猜你喜欢
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多