0

我有一個主要活動被標記爲singleInstance。然後我打開一個不同的活動的通知,以下是雙方的聲明:singleInstance和TaskStackBuilder的問題

<activity android:name="MainActivity" android:launchMode="singleInstance"..... 

<activity android:name="some.long.package.from.a.library.NotificationActivity" android:noHistory="true" android:launchMode="singleInstance" android:parentActivityName=".MainActivity"> 
    <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity"/> 
</activity> 

當我創建我修改任務堆棧的通知,以便其插入父活動:

Intent intent = new Intent(context, NotificationActivity.class); 
PendingIntent pendingIntent = TaskStackBuilder.create(context) 
       .addNextIntentWithParentStack(intent) 
       .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

這一切工作除了一個小問題之外,當我觸摸通知並轉到NotificationActivity,然後使用後退按鈕或操作欄上的後退時,它將轉到MainActivity的全新實例。

我知道singleInstance不是大多數情況下使用的理想啓動模式,但是我有一個應用程序,它有點像網絡瀏覽器,理想情況下用戶應該準確地返回瀏覽器中的哪個位置。我可以保存頁面地址並重新加載它(我將用於最糟糕的情況),但想象一下,如果您正在填寫一個長表單,並且瀏覽器只是因爲您承認了一個通知而已。

那麼有誰能告訴我爲什麼singleInstance在我修改任務堆棧的掛起意圖後被忽略?

謝謝。

回答

1

您試圖構建邏輯不一致的任務堆棧。

您已聲明MainActitylaunchMode="singleInstance"。這意味着MainActivity必須是其任務中的根活動,並且沒有其他活動將啓動到此任務(即:包含MainActivity的任務將具有一個且僅有的一個活動)。

然後,您嘗試構建一個包含MainActivity作爲NotificationActivity的父活動的任務堆棧。這是不一致的,所以Android不會這樣做。