简单页面跳转生命周期(简单清晰)
場景一: 退出后臺運行
點擊home鍵 ? ? onPause() ? onStop() ? ? 退出后 ?
①如果此時A位于棧頂 ?則調用A的onDestory();
②如果此時B位于棧頂 ?則先調用A的onDestory()再調用B的onDestory()
但是當你再次進入App時,再次退出后臺運行時 就不會再執行A或者B的onDestory()方法了,查詢了很久,也沒找到具體原因,但是看到一篇帖子 寫到:
- Activity 的 onDestroy() 是系統回調函數, 調用時機是不確定的
- 據張明云(編程,Andoid開發 話題的優秀回答者)所說,在finish()方法之后沒有立即執行onDestroy()方法,只是上述這個命題的一種情況,不僅如此,Activity的其他生民周期方法何時會調用也是不確定的,onDestroy沒有及時執行暫未找到有效的處理方法,但可以通過isFinishing()方法判斷 Activity 是否處于銷毀狀態。
場景二:A跳轉B ? B返回A
啟動A
先執行A的 ? ? ?onCreate() -->onStart()-->onResume() ? ?
A跳轉B
先執行A的 ?onPause() ?
再執行B的 ? ? ? onCreate() -->onStart()-->onResume()
后執行A的 ? ? onStop()
B返回A ? ? (這里已經測試過 ? 無論是點擊 手機上的物理鍵 還是調用 finish() 方法進行的返回 ? ?生命周期都是如下)
先執行B的 ? ?onPause()
再執行A的 ? ? onRestart() -->onStart()-->onResume()
后執行B的 ? ? ?onStop()-->onDestory()
場景三:橫豎屏切換 ? ??有三種情況(后面對所有的打印結果進行展示)
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次,但是再切換成豎屏時 會多執行onConfigurationChanged()方法
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法
onConfigurationChanged方法的作用
通過查閱Android API可以得知android:onConfigurationChanged實際對應的是Activity里的onConfigurationChanged()方法。
在AndroidManifest.xml中添加上訴代碼的含義是表示在改變屏幕方向、彈出軟件盤和隱藏軟鍵盤時,不再去執行onCreate()方法,而是直接執行onConfigurationChanged()。如果不申明此段代碼,按照Activity的生命周期,都會去執行一次onCreate()方法,而onCreate()方法通常會在顯示之前做一些初始化工作。所以如果改變屏幕方向這樣的操作都去執行onCreate()方法,就有可能造成重復的初始化,降低程序效率是必然的了,而且更有可能因為重復的初始化而導致數據的丟失。這是需要千萬避免的。
第一種情況
切換橫屏
onSaveInstanceState()--> ? ?保存數據
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()--> ? ?恢復數據
onResume()-->
?
切換豎屏 ? 執行兩次
onSaveInstanceState()-->
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()-->
onResume()-->
----------------------------------------------------
onSaveInstanceState()-->
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()-->
onResume()-->
第二種情況
切換橫屏
onSaveInstanceState()--> ? ?保存數據
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()--> ? ?恢復數據
onResume()-->
?
切換豎屏 ? 執行兩次
onSaveInstanceState()-->
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()-->
onResume()-->
----------------------------------------------------
onSaveInstanceState()-->
onPause()-->
onStop()-->
onDestroy()-->
onCreate()-->
onStart()-->
onRestoreInstanceState()-->
onResume()-->
onConfigurationChanged()-->
第三種情況
橫屏
onConfigurationChanged()-->
豎屏
onConfigurationChanged()-->
?
以后遇到更多的場景再進行添加
總結
以上是生活随笔為你收集整理的简单页面跳转生命周期(简单清晰)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android虚拟机和Java虚拟机的区
- 下一篇: 解决Redmi 6 pro底部出现黑边问