dim*_*suz 7 android android-intent android-activity
这就是问题所在。我的清单中有一个 <activity-alias> 定义如下:
<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>
Run Code Online (Sandbox Code Playgroud)
现在,用户开始MainActivity使用启动器图标,它转发到HomeActivity.
我也有一个HomeActivity从导航抽屉开始的意图。它以Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP标志开始- 重用现有的活动实例。
问题是这不能按预期工作,它实际上创建了一个新实例HomeActivity(即使它当前位于顶部且可见!)。发生这种情况是因为活动 backstack 包含 的条目.MainActivity,而不是HomeActivity它最终转发到的条目。
问题:我怀疑这可能是也可能不是 Android 中的错误,但我很难找到合适的解决方法。在这里寻求帮助!:)
我只需要启动单个活动,当用户在导航抽屉中选择一个项目时,该单个活动应该得到 onNewIntent(),而不是新活动的产生!
摆脱活动别名可以解决问题,但这对我来说不是一个可以接受的选择......
这adb dumpsys是从启动器启动活动后的结果,然后用户在 navdrawer 中选择“主页”直接启动活动,而不是通过别名(此转储确认有两个具有不同名称的条目):
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}
Run Code Online (Sandbox Code Playgroud)
您不需要HomeActivity在启动它的类中引用您的内容,而是需要更改这些意图来启动“ MainActivity”。
前任:
Intent intent = new Intent();
intent.setClassName(mContext, "ru.treto.tile.MainActivity");
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用其他IntentFilter方案,则可以将这些 IntentFilter 元素移动到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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |