Почему onCreate продолжает вызываться из панели запуска?

Задний план

Я вызвал простой код для создания ярлыка для действия. Код очень похож на этот:

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).

Что я пробовал

Я пробовал различные флаги намерений, чтобы исправить это, но не смог найти ни одного.

Вопрос

Это происходило не только на сторонних ланчерах (в моем случае Nova Launcher), но и на официальной стоковой версии Android 6, на Nexus 5.

Как это могло произойти? Почему лаунчер повторно открывает приложение?


person android developer    schedule 19.11.2015    source источник


Ответы (1)


Вы должны определить свою активность как singleTop в своем манифесте:

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

Добавление флага FLAG_ACTIVITY_SINGLE_TOP к намерению также должно работать:

....new Intent(getApplicationContext() , MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
person Roberto Betancourt    schedule 19.11.2015
comment
Другое приложение, для которого я создаю ярлык, не мое. То что я написал это пример. Однако при добавлении FLAG_ACTIVITY_SINGLE_TOP к намерению, которое я передаю EXTRA_SHORTCUT_INTENT , это работает. Пожалуйста, обновите свой ответ, и я отмечу его. - person android developer; 19.11.2015
comment
Я заметил, что вы отредактировали ответ. Обратите внимание, что когда вы это делаете, он не уведомляет меня. В любом случае, я отмечу ваш ответ сейчас. Не могли бы вы объяснить, почему я не вижу, чтобы этот флаг использовался в коде игрового магазина? Тем не менее, их намерения, похоже, не создают каждый раз новый экземпляр приложений... - person android developer; 20.11.2015