为什么 "onCreate" 不断收到启动器的调用?

Why does "onCreate" keep getting called from the launcher?

背景

我调用了一个简单的代码来创建 activity 的快捷方式。代码与这个非常相似:

Intent shortcutintent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.shortcutname));
Parcelable icon = Intent.ShortcutIconResource.fromContext(getApplicationContext(), R.drawable.icon);
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);
shortcutintent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(getApplicationContext() , MainActivity.class));
sendBroadcast(shortcutintent);

问题

事情是,当我打开应用程序,然后按下主页按钮,然后单击启动器上的应用程序图标时,我可以看到 onCreate 再次被调用(我已经在 onCreate 中添加了 toast) .

我试过的

我尝试了各种意图标志来解决这个问题,但找不到一个。

问题

它不仅发生在第三方 lanchers(在我的例子中是 Nova Launcher)上,也发生在 Nexus 5 上的 Android 6 的官方库存版本上。

怎么会这样?为什么启动器会重新打开应用程序?

您必须在清单上将 activity 定义为 singleTop:

 <activity...
        android:launchMode="singleTop"
        ...>
    </activity>

将标志 FLAG_ACTIVITY_SINGLE_TOP 添加到意图中也应该有效:

....new Intent(getApplicationContext() , MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);