0

我有一個通知,當活動中發生某些事件時向用戶顯示。當我創建通知時,如果我的活動被系統清除,我使用TaskStackBuilder來確保我有backstack活動列表。我的代碼看起來是這樣的:在通知中使用TaskStackBuilder重新創建活動

... 
    TaskStackBuilder builder = TaskStackBuilder.create(sContext); 
    builder.addNextIntent(new Intent(context, ActivityA)); 
    builder.addNextIntent(new Intent(context, ActivityB)); 
    builder.addNextIntent(new Intent(context, ActivityC)); 
    PendingIntent pendingIntent = 
      builder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT) 

    Notification.Builder builder = new Notification.Builder(context) 
      .setContentTitle(title)) 
      .setContentText(notificationText) 
      .setSmallIcon(getNotificationIcon()) 
      .setContentIntent(pendingIntent); 

    builder.build(); 
    ... 

所以,打開活動將是最後加入,這就是ActivityC(我不希望它被重新創建)。 我找到的一個解決方案是這樣的:How to make notification resume and not recreate activity? 據說我不應該使用TaskStackBuilder,但不是我想要的。我想使用TaskStackBuilder從通知開始一個活動,而不是重新創建整個活動。

任何解決方案/建議?

+0

請你想要做什麼更詳細的解釋。通常,使用'TaskStackBuilder'將導致任何現有任務被重置(即:清除)以及任務中的活動被重新創建。 –

+0

@DavidWasser我在後臺做了一些工作。它可以持續很長時間,所以用戶將離開活動,並可以通過按通知回到它。同時系統可以清理活動。這就是我使用TaskStackBuilder的原因。 – NixSam

+0

如果您只是想使用通知來允許用戶以任何狀態返回任務,那麼您不需要'TaskStackBuilder'。請參閱http://stackoverflow.com/questions/6575730/notification-to-restore-a-task-rather-than-a-specific-activity或http://stackoverflow.com/a/5502950/769265或http:/ /stackoverflow.com/questions/30544165/starting-app-only-if-its-not-currently-running/30576053#30576053 –

回答

-2
TaskStackBuilder builder = TaskStackBuilder.create(sContext); 
Intent intentForA = new Intent(context, ActivityA); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) 
builder.addNextIntent(intentForA); 

該標誌不會重新創建活動如果已經存在,並會只是對新的意圖傳遞給onNewIntent()method.For更多詳情請查看文檔

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

+0

不,這不起作用。它仍然重現活動... – NixSam

+0

這是錯誤的。首先,使用'TaskStackBuilder'否定所有這一切,因爲TaskStackBuilder'在開始時強制重置任務,而不管你提供的任何標誌。其次,在非'TaskStackBuilder'情況下,如果標誌'SINGLE_TOP'也被使用(或者如果'Activity'具有'launchMode ='singleTop'',那麼'CLEAR_TOP'標誌只會阻止'Activity'的重新創建清單聲明 –

+0

@DavidWasser你是正確的添加SINGLE_TOP標誌 – jily