这就是问题所在。我有一个< 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>
现在,用户使用启动器图标启动MainActivity
,然后转发到HomeActivity
。
我也有一个Intent从导航抽屉中启动HomeActivity
。它以Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP
标志开头 - 重用现有的活动实例。
问题是这不能按预期工作,它实际上创建了HomeActivity
的新实例(即使它当前位于顶部且可见!)。
发生这种情况是因为活动后台包含.MainActivity
的条目,而不是最终转发到的HomeActivity
。
问题:我怀疑这可能是也可能不是Android中的错误,但我很难找到一个合适的解决方法。在这里寻求帮助! :)
我只需要启动单个活动,当用户在navdrawer中选择一个项目时,该单个活动应该是onNewIntent(),而不是新生成的活动!
摆脱一个活动别名修复了一些事情,但对我来说这不是一个可接受的选择......
这是从启动器启动活动后的adb dumpsys
结果,然后用户选择&#39; Home&#39;在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}
答案 0 :(得分:3)
您不必在启动它的类中引用您的HomeActivity
,而是需要更改这些意图以启动&#34; MainActivity
&#34;代替。
EX:
Intent intent = new Intent();
intent.setClassName(mContext, "ru.treto.tile.MainActivity");
或者,如果您正在使用其他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>