gpt4 book ai didi

android - 打破了 singleTop 模式的契约

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:00 27 4
gpt4 key购买 nike

问题来了。我的 list 中有一个 定义如下:

<activity
android:name=".HomeActivity"/>

<activity-alias
android:name=".MainActivity"
android:targetActivity=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>

现在,用户使用启动器图标启动 MainActivity,它转发到 HomeActivity

我还有一个从抽屉导航启动 HomeActivity 的 Intent。它以 Intent.FLAG_ACTIVITY_SINGLE_TOP | 开始。 Intent.FLAG_ACTIVITY_CLEAR_TOP 标志 - 重用现有的 Activity 实例。

问题是这没有按预期工作,它实际上创建了 HomeActivity 的新实例(即使它当前位于顶部并且可见!)。发生这种情况是因为 Activity 后台堆栈包含 .MainActivity 的条目,而不是它最终转发到的 HomeActivity 的条目。

问题:我怀疑这可能是也可能不是 Android 中的错误,但我很难找到合适的解决方法。在这里寻求帮助! :)

我只需要启动单个 Activity ,当用户在 navdrawer 中选择一个项目时,该单个 Activity 应该获得 onNewIntent(),而不是新 Activity 的生成!

摆脱 Activity 别名可以解决问题,但这对我来说不是一个可接受的选择...

这是 Activity 从启动器启动后的 adb dumpsys 结果,然后用户在 navdrawer 中选择“Home”直接启动 Activity ,而不是通过别名(此转储确认有两个条目不同的名称):

  Main stack:
TaskRecord{4181c408 #61 A ru.treto.tile U 0}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=ru.treto.tile/.HomeActivity }
Hist #2: ActivityRecord{412514b8 ru.treto.tile/.HomeActivity}
Intent { flg=0x24000000 cmp=ru.treto.tile/.HomeActivity }
ProcessRecord{412b06e0 10165:ru.treto.tile/u0a63}
Hist #1: ActivityRecord{41723200 ru.treto.tile/.MainActivity}
Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=ru.treto.tile/.MainActivity }
ProcessRecord{412b06e0 10165:ru.treto.tile/u0a63}

最佳答案

无需在启动它的类中引用您的 HomeActivity,您需要更改这些 Intent 以启动“MainActivity”。

例如:

Intent intent = new Intent();
intent.setClassName(mContext, "ru.treto.tile.MainActivity");

或者,如果您正在使用另一个 IntentFilter 方案,您可以将这些 IntentFilter 元素移动到 list 中的 alias 条目:

<activity-alias 
android:name=".MainActivity"
android:target="ru.treto.tile.HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="ru.treto.tile.ACTION_OF_AWESOME" />
</intent-filter>
</activity-alias>

关于android - <activity-alias> 打破了 singleTop 模式的契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662714/

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