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

时间:2017-01-20 09:33:36

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

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

我选择singleInstance来防止有组织的导航 如果我像这样导航:A - > B - > C - > B - > C - > B - > C 后退动作将:C - > B - >甲

它按预期工作。

问题:如果我导航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>

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

自从A启动singleInstance B后,将存在两个任务: 任务1包含活动A,而任务2包含活动B.

您从任务管理器中打开任务2,该任务管理器仅包含singleIntance活动B,因此您无法返回活动A.

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

  

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

您可以从Developer Document: Tasks and Back Stack获得此信息。

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