2013-05-13 69 views
0

我有一個應用程序,它有多個入口點活動。我希望能夠以編程方式清除我的活動堆棧。設想一個需要用戶身份驗證的應用程序,並且用戶希望遠程使其會話失效(例如,被盜設備)。當您有多個入口點活動時清除活動堆棧?

在一個應用程序有一個單一的啓動活動的情況下,我們可以只使用:

Intent intent = new Intent(context, LoginActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

要回根系活力。但是我的應用程序可能已經從不同的入口點啓動,因此在堆棧的根目錄可能有不同的活動類別。

一些選項:

  1. 註冊在我的基本活動類的廣播接收機,我可以從任何地方打電話。在處理程序中,只需調用finish(),展開可能存在的任何堆棧。
  2. 使用皺眉的System.exit()。
  3. 在上面的例子中,使用Intent.FLAG_ACTIVITY_CLEAR_TASK除了其他兩個標誌(但是這僅僅是API 11及更高版本...)

感謝

+0

是否所有的活動都在同一個任務中? – 2013-05-14 02:09:43

+0

是的,都在同一個任務。 – user291701 2013-05-14 16:05:32

回答

0

您可以檢查名稱任務堆棧根目錄下的活動,然後使用FLAG_ACTIVITY_CLEAR_TOP啓動該活動。如果此根活動不是您想要的活動,則在onCreate中啓動您想要的活動並調用finish()。
您可以通過

  1. 調用getTaskId()找到根活動的名稱來獲得任務ID。
  2. 獲得一個ActivityManager對象,並調用getRunningTasks獲得的正在運行的任務列表(在doc檢查出的警告,我沒有了解清楚)
  3. 當列表中的任務相匹配的ID上面,你可以得到活動在根域使用字段baseActivity