2012-01-08 65 views
1

我對活動的工作方式有些困惑。如果我通過按一個按鈕來做StartActivity(),然後我按下返回按鈕返回到原始活動,然後再次按下按鈕以執行相同的操作StartActivity(),是否有兩個新活動的實例?我知道每次都會調用onCreate(),所以第一個實例是孤兒(可能最終垃圾收集)?StartActivity和多個實例

我是否應該始終確保finish()被調用(通過後退按鈕),以保證安全?我不確定這裏的協議是什麼。

+0

你覆蓋'onKeyDown'與處理'KEYCODE_BACK',或者你按下快按鈕,這導致兩個活動啓動。 – dreamtale 2012-01-08 14:26:12

回答

0

從Android開發網站(source):

的應用程序通常由鬆散地相互結合多種活動。通常,應用程序中的一項活動被指定爲「主要」活動,這是第一次啓動應用程序時向用戶呈現的。然後,每項活動都可以開始另一項活動,以便執行不同的操作。 每次新活動開始時,先前的活動都會停止,但系統會保留堆棧中的活動(「後退堆棧」)。當一個新的活動開始時,它會被推到後面的堆棧並且獲得用戶焦點。後退堆棧遵循基本的「後進先出」隊列機制,因此,當用戶完成當前活動並按下BACK鍵時,它將從堆棧中彈出(並銷燬),並恢復前一個活動。 (後退堆棧在任務和返回堆棧文件更多討論。)

(由我加粗)

這頁是特別有趣,瞭解它的工作原理在詳細信息的方式:

Tasks and back stack

+0

在一個相關的問題上,是否有辦法彈出堆棧中的第一個活動,即跳到「主頁」活動的所有路徑? – 2012-01-08 14:40:53

+0

http://stackoverflow.com/questions/5193494/how-to-finish-multiple-activities-on-a-button-click - 就我個人而言,我使用onActivityResult鏈接(使用StartActivityForResult開始您的活動,並在onActivityResult中設置相應的狀態,所以你可以在需要的時候完成它們) – Guillaume 2012-01-08 19:32:25

0

如文檔所述,

public void onBackPressed()由於:API級別5

當活動檢測到用戶按回撥鍵 時調用。默認實現只是完成當前活動, 但您可以重寫此操作以執行任何您想要的操作。

上按返回鍵的默認實現將調用finish()當前的活動