3

我的应用程序包含多个活动,主要活动(A)处于launchMode singleTop,每个活动都处于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>

谢谢你的帮助

4

1 回答 1

3

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

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

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

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

无论 Activity 是在新任务中启动还是在与启动它的 Activity 相同的任务中启动,Back 按钮总是将用户带到上一个 Activity。

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

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

于 2017-01-20T09:59:09.667 回答