ランチャーでアプリ アイコンをクリックしてアクティビティを起動すると、履歴から選択するのと同じように、アクティビティが前面に表示されます。したがって、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>
この resumeIntent は、Android によって FLAG_ACTIVITY_NEW_TASK に自動的に追加されます。このフラグは、存在する場合、バックグラウンドからのアプリケーションの再開を許可します。
ここまでは順調ですが、この通知をクリックしてアプリを再開した後、ランチャーからアプリをクリックすると、Android は MainActivity の別のインスタンスを起動します。
これにより、アプリケーションとバックスタックが壊れます (スタックに 2 つの MainActivity があり、ユーザーにとっては奇妙です)。
おかしなことに、これは、通知をクリックした後にのみ発生します (ランチャーの動作をクリックして別のインスタンスを起動します)。