1、說明android
Activity主要的三種狀態:網絡
Running(運行):在屏幕前臺(位於當前任務堆棧的頂部)優化
Paused(暫停):失去焦點但仍然對用戶可見(覆蓋Activity多是透明或未徹底遮擋).net
Stopped(中止):徹底被另外一個Activity覆蓋blog
2、事件方法鏈生命週期
2.1 進入Activity事件
onCreate -> onStart -> onResume內存
2.2 BACK鍵ci
onPause -> onStop -> onDestroy資源
2.4 休眠/恢復
休眠: onPause
恢復: onResume
未設置android:configChanges:
onPause -> onStop -> onDestory -> onCreate -> onStart -> onResume
設置了android:configChanges="orientation|keyboardHidden":
不會觸發生命週期方法,參見文章這裏。
2.6 來電來電,顯示來電界面:
onPause -> onStop
關閉電話界面,從新回到當前Activity:
onRestart -> onStart -> onResume
2.7 其餘Activity進入下一個Activity:
onPause -> onStop
從其餘Activity返回至當前Acitivity:
onRestart -> onStart -> onResume
3、與Activity生命週期結合的應用場景
3.1 與廣播(Broadcast)結合
在onResume註冊廣播(registerLinstener),在onPause註銷廣播(unregisterLinstener)。 例如:
作"搖一搖"功能(傳感器)、監聽網絡變化,就能夠在onResume中註冊監聽,在onPause裏註銷掉,已節省資源提升效率。
3.2 與服務(Service)結合
在onStart綁定服務(bindService),在onStop中取消綁定(unbindService)。 例如:
須要經過Service定時更新UI上的數據,而Activity的可見週期在onStart與onStop之間,那麼就能夠再onStart時啓動服務,在onStop時中止服務。爲了節約系統資源,除了提升用戶體驗之外,開發人員應儘量的優化程序。
3.3 與Cursor結合
使用managedQuery讓Activity幫你管理Cursor的生命週期,不用本身去close。但也有一些問題,補充兩篇文章:這裏1、 這裏2。
3.4 釋放資源
能夠在onDestory中釋放一些資源。好比能夠在onDestory時調用MediaPlayer的release。
4、注意
4.1 全部Activity生命週期方法的實現都必須先調用其父類版本。
4.2 因爲Activity常常會暫停和恢復之間切換,因此onResume和onPause這兩個方法應當是輕量級的。
4.3 在系統再某種緊急狀況下須要回收內存,onStop、onDestory可能不會被調用,所以須要在onPause中把須要長期保存的數據保存起來。