簡單頁面跳轉生命週期(簡單清晰)

場景一: 退出後臺運行

點擊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()-->

 

以後遇到更多的場景再進行添加

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