Erstens kann die Stapelstruktur untersucht werden. Für den Startmodus:singleTop
Befindet sich bereits eine Instanz derselben Aktivität oben auf dem Aufgabenstapel, wird diese Instanz erneut verwendet, um auf die Absicht zu reagieren.
Alle Aktivitäten werden im Stapel gehalten ("first in last out"). Wenn also Ihre aktuelle Aktivität ganz oben im Stapel liegt und Sie sie in der manifest.file als singleTop definieren
android:name=".ActivityA"
android:launchMode="singleTop"
Wenn Sie in der ActivityA die Aktivität neu erstellen, wird sie nicht onCreate eingeben, sondern onNewIntent() fortsetzen und Sie können sehen, indem Sie eine Benachrichtigung erstellen Nicht:Wenn Sie onNewIntent(Intent) nicht implementieren, werden Sie keine neue Absicht erhalten.
Intent activityMain = new Intent(ActivityA.this,
ActivityA.class);
activityMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(activityMain);
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
notify("onNewIntent");
}
private void notify(String methodName) {
String name = this.getClass().getName();
String[] strings = name.split("\\.");
Notification noti = new Notification.Builder(this)
.setContentTitle(methodName + "" + strings[strings.length - 1])
.setAutoCancel(true).setSmallIcon(R.drawable.ic_launcher)
.setContentText(name).build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify((int) System.currentTimeMillis(), noti);
}