簡體   English   中英

設置Android意圖,以便在創建新活動之前將所有現有活動從Backstack中刪除

[英]Setup Android intent so all existing activities is removed from backstack before a new one is created

我想要實現的是從兩個不同的位置開始我的活動,並且根據位置的不同,我的活動是從用戶界面開始的。 對我而言,最好的解決方案是關閉所有現有活動,以確保始終調用onCreate() ,這是我要設置用戶界面的地方。

我嘗試了不同的解決方案來實現這一目標。 首先,我嘗試將Android Manifest launchMode更改為android:launchMode="singleTask"android:launchMode="singleInstance"即使它似乎僅在內存中保留一個任務或實例時也不會運行onCreate()如果已經有活動,則將執行onNewIntent() 這不是我想要的。 實現此目的的另一種方法是設置android:history="false"但這不是一個選項,因為它對於我的應用程序中的其他功能是必需的。

我還嘗試為Inten開始活動設置不同的標志。 這樣的意圖設置:

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

作為PendingIntent被解雇似乎是確保每次調用onCreate()的肯定方法,但是這些標志似乎並沒有執行它們所描述的事情。 如果我正在進行活動,然后按“主頁”按鈕,然后再次啟動我的活動,則將按原樣調用onCreate() ,但是如果我按“后退”按鈕,那么它將導航到我從中按“主頁”按鈕的活動,因此標記似乎並不能確保活動在最上面也不能唯一。

老實說,我真的很迷戀這個簡單的問題,但是解決方案成了一場噩夢。 您必須能夠通過正確設置意圖來實現這一目標,或者?

采用

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

所以返回堆棧將被清除,但FLAG_ACTIVITY_CLEAR_TASK在介紹api 11 ,所以如果你想在較低的API來使用它只需添加android-support-v7-appcompat您的項目,使用這樣的:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

如果要關閉所有活動而沒有動畫,請添加Intent.FLAG_ACTIVITY_NO_ANIMATION

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM