2011-02-03 152 views
1

我正在構建一個需要用戶登錄並獲取用戶ID的應用程序。這個id是我的擴展Application類的成員變量。銷燬活動堆棧

我想讓應用程序識別何時/如果這個變量被清除了,如果是的話,拋出我的日誌屏幕並銷燬它後面的Activity堆棧。

這裏就是我想我會做的事:

擴展活動和ListActivity(目前只有兩種類型我使用的活動)。在onResume()處理程序中,檢查是否設置了用戶標識。如果沒有,請拋出登錄屏幕並銷燬其後面的Activity堆棧的其餘部分。我所有的活動都將來自這些新的擴展活動。

我的問題在於,我不知道如何銷燬特定Activity後面的Activity棧。有任何想法嗎?

一個想法是有一個廣播接收監聽一個特定的消息,告訴活動自殺,但我希望Android已經有適合這種情況的東西。

更新:

另外,有沒有辦法清除整個活動堆棧?我想重寫Activity上的onBackPressed()處理程序,並將Activity堆棧炸掉,以便用戶重新回到Android主屏幕。

+2

使用FLAG_ACTIVITY_CLEAR_TOP(http://stackoverflow.com/questions/3973092/android-nuke-the-previous-app-history) – danh32 2011-02-03 16:05:23

+0

嗯.. 。在用戶登錄後,我在Activity的Activity中調用finish();所以它不再是在堆棧上,但我想我不能這樣做 – Andrew 2011-02-03 16:20:29

回答

3

我同意danh32,將FLAG_ACTIVITY_CLEAR_TOP設置爲將登錄活動置於堆棧頂部的意圖將會破壞新活動(因此,登錄活動)後面的所有活動。這會在堆棧上留下一個活動。

Intent myIntent = new Intent(view.getContext(), DisplayMenu.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(myIntent); 
finish(); 

我用這個選項允許用戶通過很多活動從長路徑回到主屏幕。

7

其他選擇將使用AndroidManifest.xml中的noHistory參數來完成此操作。 所以你的活動不應該被放置在歷史堆棧

<activity android:name=".MyActivity" 
      android:noHistory="true" />