gpt4 book ai didi

如果按下后退按钮,android singleinstance Activity 不是单一的

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:27 28 4
gpt4 key购买 nike

我遇到了一个有趣的问题,一个 Activity 被创建了多次,即使它在 list 中被定义为一个 singleTask 或一个 singelInstance Activity。这是如何重现的。比如说,在主要 Activity 中:

@Override
protected void onResume() {
Intent i = new Intent(MainActivity.class, SingleActivity.class);
startActivity(i);
}

在我的 SingleActivity 中,我有:

@Override
protected void onCreate(Bundle savedInstanceState) {
...
Log.i("SingleActivity", "onCreate " + System.identityHashCode(this));
...
}

在 list 中,我有:

    <activity android:name=".SingleActivity"
android:launchMode="singleInstance"
/>

现在,如果我启动应用程序,一切似乎都正常,预计在一种情况下:如果我在 SingleActivity 位于前面时按下“后退”按钮,它会导航回 MainActivity,其中 MainActivity.onResume() 将创建另一个 SingleActivity 实例,而不是提出已经存在的实例。这是我所知道的,因为在日志上显示了不同的身份哈希码。

如果启动模式是 singleTask,情况似乎也是如此。

唯一的解决方法似乎是覆盖 onBackPressed(),但这似乎是一个丑陋的解决方案。

我想知道我做错了什么

最佳答案

这是taskAffinity的问题.因为你没有指定 taskAffinity在您的 MainActivity 上的 list 中或者你的 SingleActivity ,这两个 Activity 具有相同的(默认)taskAffinity .当您开始一项 Activity 时,Android 会检查 taskAffinity您要开始的 Activity 。如果与taskAffinity相同任务中的根 Activity ,那么它将忽略launchMode="singleInstance"launchMode="singleTask" (因为这些启动模式需要 Android 创建一个新任务来启动 Activity)并在当前任务中启动 Activity。

不幸的是,这没有很好的记录,但是 taskAffinity优先于 launchMode .

如果你真的想要一个singleTasksingleInstance Activity (这通常不是正确的做法,因为它会带来一大堆其他你可能会出错的讨厌的事情),那么你需要确保你的 singleInstancesingleTask Activity 在其 <activity> 的 list 中具有以下内容定义:

android:taskAffinity=""

如果您需要更多信息,请在 StackOverflow 或 Google 中搜索“launchmode taskaffinity”

关于如果按下后退按钮,android singleinstance Activity 不是单一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com