从最近的应用程序屏幕打开 singleInstance activity 时保留任务堆栈

Keep task stack when opening singleInstance activity from recent apps screen

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

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

它按预期工作。

问题:如果我导航 A -> B 然后我打开应用程序最近屏幕,单击我的应用程序,显示 activity b(确定)但如果我返回应用程序退出并且 returns 到 android 主页(activity 没有被破坏,自从最近的应用程序屏幕以来我总是可以打开 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>

感谢您的帮助

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

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

你从任务管理器中打开任务2,里面只有一个实例Activity B,所以你无法返回到Activity A.

使用后退按钮时效果很好,因为

Regardless of whether an activity starts in a new task or in the same task as the activity that started it, the Back button always takes the user to the previous activity.

您可以从 Developer Document: Tasks and Back Stack.

获取

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