1.正常情況下的activity的生命周期
activity的基本生命周期的方法就不逐一介紹了找爱,其中有兩個方法需要說明下车摄,原因是又一次遇到需要測量控件的寬度吮播,測量方法寫在onCreate()里邊了,但是不管怎么做疮胖,測量結(jié)果都是0谷市,當(dāng)然也有一種測量方法可以使用 迫悠,這里只分析activity的生命周期创泄,其他的不做解說鞠抑,有興趣的可以百度自己試下搁拙。
(1). onStart()
該方法表示activity已經(jīng)可見了箕速,但是還沒有出現(xiàn)在前臺盐茎,還無法與用戶交互探越,可以理解為钦幔,activity已經(jīng)顯示出來了节槐,但是我們還無法看到activity的界面。
(2). onResume()
該方法表示activity已經(jīng)可見了秸架,用戶也可以看到activity的界面了东抹,activity出現(xiàn)在前臺缭黔,可以和用戶進(jìn)行交互了馏谨。
如果用戶從當(dāng)前界面A跳轉(zhuǎn)到一個新的activityB,那么B的onResume和A的onPause那個先執(zhí)行?
廢話:啟動activity的請求有Instrumentation來處理敬察,然后他通過Binder向AMS(AndroidManagerService)發(fā)請求,AMS內(nèi)維護(hù)著一個ActivityStack并負(fù)責(zé)棧內(nèi)的activity的狀態(tài)同步,AMS通過ActivityStack去同步Activity的狀態(tài)從而完成生命周期的調(diào)用。
源碼分析去掉,有興趣的可以去查看香相關(guān)資料秋度,或者查看官方API對onPause()方法的說明,不能在onPause()中做重量級的操作埠居,因?yàn)楫?dāng)onPause之后新的activity才會onResume()。
2.異常情況下activity的生命周期
豎屏銷毀的情況下滥壕,會執(zhí)行onSaveInstanceState*()進(jìn)行保存數(shù)據(jù),系統(tǒng)默認(rèn)保存GroupView的子類的輸入或者顯示的內(nèi)容之類的數(shù)據(jù)胁孙,然后在重新建立的activity中可以在onCreate()和onRestoreInstanceState()進(jìn)行判斷称鳞,在onRestoreInstanceState()中可以獲取到保存的數(shù)據(jù),onSaveInstanceState()執(zhí)行可能在onPause()之前或者之后執(zhí)行狂票,onRestoreInstanceState執(zhí)行是在onStart()之后onPause()之前執(zhí)行熙暴。當(dāng)然,如果設(shè)置了android:configChanges="orientation|screenSize"屬性在會后(需要保證minSdkVersion或者targetSdkVersion有一個大于13)掂器,onRestoreInstanceState和onSaveInstanceState都不會執(zhí)行,執(zhí)行的是onConfigurationChanged国瓮。
PS:系統(tǒng)只會在activity異常終止的時(shí)候調(diào)用onSaveInstanceState和onRestoreInstanceState