0

我知道 launchMode:"singleTask" 的意思是,如果之前已经创建了一个活动,并且在将来被要求显示,Android 将简单地显示旧的,而不是创建一个新的实例。我面临的问题可以用一个例子来说明:-

假设我们启用了两个活动
A活动
B (带有 launchMode ="singleTask" 的活动)(这就是其清单声明中的全部内容)

现在,如果 A 创建了一个对应于 B (A->B) 的 Intent ,则 A 将完成并从活动堆栈中删除。我怎样才能防止这种情况发生。我想要的是,当 A 调用 B(创建意图)时,返回 B 的前一个实例,并且 A 保持原样并且没有被破坏。感谢您的帮助 。任何帮助表示赞赏

编辑

<activity
        android:name="com.example.Activities.A"
        android:launchMode="singleTask"
        android:clearTaskOnLaunch="false"
        android:finishOnTaskLaunch="false"
        android:label="@string/app_name"

        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.example.Activities.B"
        android:launchMode="singleTask"
        android:clearTaskOnLaunch="false"
        android:finishOnTaskLaunch="false"
        android:label="@string/app_name"

        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
4

1 回答 1

0

如果您只想让 2 个活动在同一个任务中来回切换,那么您应该删除所有特殊的启动模式,只从另一个活动中启动一个活动,如下所示:

Intent intent = new Intent(this, ActivityX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

如果您BA使用此方法开始并且也AB使用此方法开始,那么您将在您的任务中拥有每个实例,Activity它们只会更改堆栈中的位置。这不会创建任何新实例。

还要删除<intent-filter>声明,您不需要它们。您只需要一个Activity包含“ACTION=MAIN”和“CATEGORY=LAUNCHER”的根。

于 2016-12-28T15:14:47.147 回答