奇怪的singleTask行为

时间:2016-06-03 21:46:55

标签: android android-intent android-activity launchmode

我理解launchMode:“singleTask”意味着如果以前创建了一个活动并且将来要求显示该活动,Android将只显示旧活动而不是创建新实例。我面临的问题可以用一个例子来说明: -

假设我们有两项活动 A 动作
启用了 B (启动时使用launchMode =“singleTask”)(这就是其清单声明中的所有内容)

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

编辑

import pytest

PARAMS = [
    (1, "One"),
    (2, "Two"),
    (3, "Three")
]


def my_id(number, string):
    return '-'.join([str(number), string[0]])


@pytest.mark.parametrize("number, string",
                         PARAMS,
                         ids=[my_id(number, string) for number, string in PARAMS])
def test_stupid(number, string):
    assert 0 == 1

1 个答案:

答案 0 :(得分:0)

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

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

如果您使用此方法从B开始A并使用此方法从A启动B,那么您将拥有每个Activity的一个实例在你的任务中,他们只会改变堆栈中的位置。这不会创建任何新实例。

同时删除<intent-filter>声明,您也不需要它们。您只需要一个根Activity,其中应包含&#34; ACTION = MAIN&#34;和&#34; CATEGORY = LAUNCHER&#34;。