2016-01-14 51 views
5

enter image description here隱藏活動意味着活動對象不存在?

我是從大書呆子牧場的「Android編程」看這個頁面的,我被下面的句子搞糊塗了。它規定「當活動被隱藏時,一個活動對象不存在。」這讓我感到困惑,因爲當我打開一個應用程序並按下home按鈕時,會調用onPause(),並且活動達到「暫停」狀態,其活動存儲在操作系統中,如圖所示。它必須仍在後臺運行,因爲按下home按鈕時不會調用onDestroy()。事實上,當我打開我的任務管理器時,我可以看到按下主頁按鈕時活動的樣子。 「活動對象不存在」究竟是什麼意思?當它在背景中明顯處於暫停狀態時?

+0

我覺得這裏最關鍵的一點是最後一句,「操作系統可以使用活動記錄時,它需要重新加進活動「。 Activity'對象可能不再有效,但活動內的組件,特別是Parcelable位存儲在OS中。當應用程序恢復時,操作系統可以從可調節數據構建備份活動。當你的應用程序處於後臺時,Android可能也會釋放資源,因爲它最終會調用'onDestroy'。 – CzarMatt

回答

0

這篇文檔看起來有點錯誤和困惑。 Android官方文檔沒有提到「隱藏」狀態,而是文檔中的「應用進程終止」塊。here

基本上,只從STOPPED狀態,OS可能隨時破壞您的活動。如果它這樣做,會調用onSaveInstanceState。這個Activity變量將是無效的。在任何時候,它都可以重新創建一個新的Activity,然後調用onCreate然後onRestoreInstanceState,傳入你之前保存的Bundle,重新創建活動。

-1

這是令人困惑的我,因爲當我打開一個應用程序,並按下家 按鈕,在onPause()被調用,活動達到了「暫停」狀態 其活性在OS藏匿,如圖這個數字。

我不會說這是「隱藏」。你的活動活得很好,剛剛暫停。

它必須仍在後臺運行,因爲onDestroy()不是 當我按下home按鈕時調用。

沒錯。當你點擊主頁按鈕時,你對操作系統說:「嘿,我要去別的地方,但我不一定完成這個活動。」

如果您改爲點擊後退按鈕,則會看到onDestroy調用。在這裏你正在對操作系統說:「好的,我已經完成了這個活動,你想做什麼。」

它們究竟是什麼意思「活動對象不存在?」當它 顯然在後臺暫停狀態?

當操作系統需要摧毀你的活動而沒有「告訴」它這樣做(即點擊返回按鈕)時,進入隱藏狀態。當您的設備經歷設備配置更改時會發生這種情況。一個典型的例子是旋轉。如果操作系統需要釋放內存,也會發生這種情況。在這種情況下,onSaveInstanceState將被調用以在Bundle中捕獲您的活動狀態。隱藏狀態就是這個Bundle的保存和你的活動的類名。實際的Activity對象被標記爲垃圾收集。然後只給出Bundle對象和活動的類名稱,如果用戶返回該活動,則操作系統可以創建活動的新實例。

一拿就是你不要必須自己執行onSaveInstanceState除非你有特定的信息要保存。視圖層次結構的某些組件會自動將有關自己的信息添加到Bundle,因爲超級Activity.onSaveInstanceState仍將被調用。從文檔:

默認實現通過在 層次結構中有一個ID,每個視圖調用的onSaveInstanceState(),並通過保存的ID需要照顧的大多數UI每個實例 狀態你的當前爲 的聚焦視圖(所有視圖均由onRestoreInstanceState(Bundle)的默認實現 恢復)。如果您將此方法覆蓋爲 保存未被每個單獨視圖捕獲的附加信息,那麼您將可能想要調用默認實現 ,否則應準備好保存每個視圖的所有狀態。

http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

您可以點擊這裏來源: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/app/Activity.java#1371