Activity生命週期幾個思考

https://blog.csdn.net/csdn_aiyang/article/details/72866032
Activity 最重要的兩個方法是 onResume() onPause()

1 Activity間跳轉時,爲什麼 AActivity 的 onPause() 被調用後,才執行 BActivity的 初始化流程 (onCreate() —>onStart() —>onResume()),然後再執行 AActivity的 onStop()方法?

從 AActivity切換到 BActivity的 日誌如下:
在這裏插入圖片描述

當用戶點擊打開新的 Activity,肯定是想 儘快進入新的視圖,進行操作。onResume()方法,一般會打開獨佔設備,開啓動畫等。當需要從 AActivity 切換到 BActivity時,先執行 AActivity中的 onPause()進行關閉獨佔設備,關閉動畫等,以防止 BActivity也需要使用這些資源,因爲 AActivity的資源回收,也有利於 BActivity運行的流暢。
當 AActivity中比較消耗資源的部分的 onPause()中關閉後,再執行 BActivity的初始化,顯示視圖與用戶交互。然後,系統在後臺默默執行 AActivity的 onStop() 操作,去回收AAcitivity佔用的其餘資源。即使 onStop()中會有比較耗時的操作,也沒有關係,這是在後臺執行,也不影響用戶體驗。

2 onSaveInstanceState() 和 onRestoreInstanceState() 理解

  • onSaveInstanceState() 和 onRestoreInstanceState() 並不是 Activity 生命週期的方法

onSaveInstanceState() 會在 onPause() 或 onStop()之前執行
onRestoreInstanceState() 會在 onStart() 和 onResume() 之間執行
當應用遇到意外情況(內存不足,用戶直接按 home鍵),由系統直接銷燬一個Activity時,onSaveInstanceState() 就會調用,但是當用戶主動銷燬 Activity,如按 back鍵,或直接執行 finish(),這種情況下,onSaveInstanceState() 就不會執行。因爲這種情況下,用戶的行爲,決定了不需要保存Activity的狀態

  • onRestoreInstanceState()會跟onSaveInstanceState()成對出現嗎
    不會成對出現,onSaveInstanceState()需要調用的時,activity可能銷燬,也可能沒有銷燬,只有在activity銷燬重建的時候onRestoreInstanceState()纔會調用。

  • 在onSaveInstanceState()中默認情況下具體幹些什麼
    默認情況下默認會自動保存Activity中的某些狀態,比如activity中各種UI的狀態,因此在activity被“系統”銷燬和重建的時候,這些Ui的狀態會默認保存,但是前提條件是Ui控件必須制定id,如果沒有指定id的話,UI的狀態是無法保存 的。

  • 總結下 Activity數據的保存和恢復

Activity中保存數據有兩種方式 onPause() onSaveInstanceState(bundle)
恢復數據也有兩種途徑 onCreate(Bundle) onRestoreInstanceState(bundle)
默認情況下,onSaveInstanceSate()和onRestoreInstanceState() 會對 UI狀態,進行保存和恢復,如果需要其他數據,可以在 onSaveInstanceState() onPause()保存
如果是比較持久化的數據,google 推薦的是 通過 onPause() 保存

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章