Активность с launchMode singleTop или singleTask всегда воссоздается

MainActivity в моем приложении имеет launchMode из singleTop определено в файле манифеста. Всякий раз, когда я нажимаю на уведомление, моя MainActivity воссоздается, а старый экземпляр уничтожается. MainActivity видна и на переднем плане при нажатии на уведомление, поэтому я предполагаю, что намерение будет передано текущему экземпляру onNewIntent(), но этого никогда не происходит. Вот намерение, которое я создаю:

Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(App.getInstance());
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

Я иногда добавляю FLAG_ACTIVITY_CLEAR_TOP а также FLAG_ACTIVITY_SINGLE_TOP с намерением, как так:

resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Я также пытался использовать singleTask launchMode также с этими флагами и такое же поведение произошло. Может ли кто-нибудь дать некоторое представление об этом поведении?

1 ответ

Решение

Вам не нужно создавать новый TaskStackBuilder, Попробуйте намерение, которое действует как вы хотите перезапустить приложение, но singleTop будет препятствовать этому:

Intent resultIntent = new Intent(App.getInstance(), MainActivity.class);
resultIntent.setAction(Intent.ACTION_MAIN);
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

PendingIntent resultPendingIntent = PendingIntent.getActivity(App.getInstance(), 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Другие вопросы по тегам