我有一個Activity,其launchMode是singleTop(在清單中)。我的理解是,如果Activity是singleTop並且位於活動堆棧的頂部,那麼使用新的Intent啓動Activity實際上會導致在Activity上調用onNewIntent(),而不會創建活動的新實例(因此,onCreate()不被調用)。singleTop即使在堆棧頂部時有時也會創建活動
此活動運行前臺服務,顯示正在進行的通知。選中後,此通知將簡單地將用戶帶回堆棧頂部的活動(沒有從此單一活動啓動的活動)。我的問題是,當選擇通知時,有時活動的新實例被創建 - 即使它明顯已經在堆棧頂部。這對於我的Activity來說是有問題的,因爲它的行爲對於在後臺被殺死並重新啓動的情況是不同的(相對於onNewIntent()而言)。我的服務使用呈現通知的代碼如下:
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(MainActivity.class);
Intent notificationIntent = new Intent(this, MyProblematicActivity.class);
notificationIntent.putExtra(EXTRA_MY_DATA, "MyData");
stackBuilder.addNextIntent(notificationIntent);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder notificationBuilder = new Notification.Builder(getApplicationContext()).
setSmallIcon(smallIconResourceId).
setContentTitle(contentTitle).
setContentText(contentText).
setAutoCancel(false).
setOngoing(true).
setContentIntent(pendingIntent);
startForeground(MY_NOTIF_ID, notificationBuilder.build());
我說,這種行爲時有發生,而當它,它會做如此反覆。例如:
- MyProblematicActivity啓動首次
- 服務啓動和呈現通知
- 通知被選擇。
- MyProblematicActivity被重新創建(服務已經啓動,通知已經顯示)。
- 重複2-4個forevs。
偶爾,#3後,MyProblematicActivity的onNewIntent()被調用,而無需創建一個新的實例,以及事情的來龍去脈預期。
我不知道爲什麼會發生這種情況。任務根目錄下的狀態活動能否影響我的單個活動的行爲? FWIW,創建MyProblematicActivity的活動是一個singleTask活動。
這並不能解決問題。正在創建一個活動的新實例,並且正在調用onCreate()。 – rrbrambley