Запуск активности путем нажатия на значок приложения в панели запуска должен вывести активность на передний план, как если бы она была выбрана из истории. Таким образом, вызов onCreate не должен существовать.
Однако, если мы попытаемся сделать это после запуска действия, щелкнув уведомление, тогда программа запуска просто запустит другой экземпляр действия.
Какие флаги я должен добавить, чтобы программа запуска продолжала работать должным образом (возобновляя точное состояние приложения из фона)?
Я опубликую основной код.
Это запускает уведомление:
Intent resumeIntent = new Intent(this, MainActivity.class);
PendingIntent resumePendingIntent = PendingIntent.getActivity(this, 2,
resumeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Notification resumeNotification = new Notification.Builder(this).setContentTitle(
"Resume style")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(resumePendingIntent)
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
notificationManager.notify(1, launcherNotification);
Вот как выглядит активность манифеста:
<activity
android:name="com.example.ihatenotifiicationsapp.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Это резюмеIntent будет автоматически добавлено Android в FLAG_ACTIVITY_NEW_TASK. Этот флаг разрешает возобновление работы приложения из фона, если он присутствует.
До сих пор все было хорошо, но если после того, как вы щелкнете это уведомление и возобновите работу приложения, вы щелкнете приложение из панели запуска, Android запустит еще один экземпляр MainActivity.
Это ломает мое приложение и задний стек (у вас будет 2 MainActivity в стеке, что странно для пользователя).
Самое смешное, что это происходит (нажав на кнопку запуска, чтобы запустить другой экземпляр) только после того, как вы нажмете уведомление.