2016-11-14 93 views
0

我的Android應用程序基於四項活動。最後一個活動啓動一個意向服務並將其自身設置爲背景。如何設置所有活動的歷史記錄

之前我發送的最後一個活動背景我想從堆棧中歷史

我想已經設置爲活動沒有歷史= true屬性中刪除所有四項活動。這會導致錯誤,當我使用startActivityForResult,所以我需要一個不同的解決方案

回答

1

我真的不認爲有一個「好」的方式做到這一點,我會嘗試這樣的事:

首先創建一個SelfClosingActivity其唯一的工作就是打開後關閉本身:

public void onCreate(Bundle savedInstanceState()) { 
    super.onCreate(savedInstanceState); 
    finish(); 
} 

當你想關閉所有活動(您啓動IntentService我想以後)運行SelfClosingActivity,並添加標誌清除當前堆棧。

Intent intent = new Intent(this, SelfClosingActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

這將打開SelfClosingActivitySelfClosingActivity將關閉本身留下棧完全用完之前清除當前的堆棧。

+0

但我想從歷史堆棧中刪除中的所有活動。我的最後一項活動啓動了一個在後臺運行的意圖服務 –

+0

,那麼當IntentService運行時,您想向用戶展示什麼? –

+0

我不會向用戶展示任何東西。 IntentService將在較長時間內在後臺運行(上傳大文件)。完成上傳後,它會向用戶發送通知 –

0

FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_NEW_TASK將做你想做的。

FLAG_ACTIVITY_CLEAR_TOP

在API級別1 INT FLAG_ACTIVITY_CLEAR_TOP如果設置,以及正在啓動的 活動已經在當前任務運行,則 而不是推出該活動的一個新實例,所有其他 上的活動將被關閉,並且這個意圖將 作爲新的意圖傳遞給(現在在上面)舊的活動。

例如,考慮一個由任務的活動:A,B,C,D. 如果d用解析爲活動B的 成分的意圖調用startActivity(),則C和d將是成品和B接收 給定的意圖,導致堆棧現在是:A,B.

該啓動模式也可用於將結合良好的效果與 FLAG_ACTIVITY_NEW_TASK:如果用於啓動的根活動任務 它會將任務的任何當前正在運行的實例帶到前臺 ,然後將其清除到其r ot狀態。例如,在從通知 管理器啓動活動時,這尤其有用,例如: 。

參考Tasks and Back Stack更多信息