这就是问题所在。我的清单中有一个定义如下:

<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.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP标志开始-以重用活动的现有实例。
问题是,这无法按预期工作,它实际上创建了一个新的HomeActivity实例(即使它当前位于顶部且可见!).
这是因为活动backbackback包含一个.MainActivity条目,而不是它最后转发到的HomeActivity条目。
问:我怀疑这可能是Android系统的缺陷,也可能不是,但我很难找到一个像样的解决办法。在这里寻求帮助!:)
我只需要启动一个活动,当用户在navDrawer中选择一个项目时,这个活动应该得到onnewintent(),而不是新的活动生成!
去掉活动别名可以修复问题,但这不是我可以接受的选项…
以下是从Launcher启动活动后的adb dumpsys结果,然后用户在NavDrawer中选择“Home”,它直接启动活动,而不是通过别名(此转储确认有两个名称不同的条目):
  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,而是需要改变这些意图来启动“MainActivity”。
前任:

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>

07-28 03:53