生命週期
Android 系統在Activity 生命週期中加入一些鉤子,咱們能夠在這些系統預留的鉤子中作一些事情。
例舉了 7 個經常使用的鉤子:
protected void onCreate(Bundle savedInstanceState)
protected void onStart()
protected void onResume()
protected void onPause()
protected void onStop()
protected void onRestart()
protected void onDestroy()
簡要說明:
onCreate(Bundle savedInstanceState):建立activity時調用。設置在該方法中,還以Bundle中能夠提出用於建立該 Activity 所需的信息。
onStart():activity變爲在屏幕上對用戶可見時,即得到焦點時,會調用。
onResume():activity開始與用戶交互時調用(不管是啓動仍是從新啓動一個活動,該方法老是被調用的)。
onPause():activity被暫停或收回cpu和其餘資源時調用,該方法用於保存活動狀態的。。
onStop():activity被中止並轉爲不可見階段及後續的生命週期事件時,即失去焦點時調用。
onRestart():從新啓動activity時調用。該活動仍在棧中,而不是啓動新的活動。
onDestroy():activity被徹底從系統內存中移除時調用,該方法被調用多是由於有人直接調用 finish()方法 或者系統決定中止該活動以釋放資源。
橫豎屏切換
1 切換到橫屏
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
2 切換到豎屏,銷燬了兩次
onSaveInstanceState
onPause
onStop
onDestroyonCreate
onStart
onRestoreInstanceState
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
android
3 修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",切橫屏,只銷毀一次。xml
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume生命週期
4 再切回豎屏,發現不會再打印相同信息,但多打印了一行onConfigChanged事件
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onRestoreInstanceState
onResume
onConfigurationChanged內存
5 更改 android:configChanges="orientation" 改爲 android:configChanges="orientation|keyboardHidden",切橫屏,就只打印onConfigChanged資源
onConfigurationChangedit
6 切回豎屏io
onConfigurationChanged
onConfigurationChanged鉤子
總結:sdk
一、不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次
二、設置Activity的android:configChanges="orientation"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次
三、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法。(執行這個方法,必須設置sdk version 大於等於13.0)