Android生命周期大概分為兩種情況:
-
正常情況:
AndroidLifeCycle.jpg- 第一次啟動,回調(diào)如下:onCreate --> onStart --> onResume.
- 退出或者銷毀Activity,回調(diào)如下:onPause --> onStop --> onDestroy.
-
打開一個新的Activity,舊Activity會先調(diào)用onPause(), 然后再啟動新的Activity∪回調(diào)如下:
GotoNewActivity.png -
從新Activity返回舊Activity時,也是新Activity先調(diào)用onPause(),然后等舊Activity回調(diào)onRestart() --> onStart() --> onResume()啟動后茶敏,新Activity再銷毀。
ReturnToOldActivity.png - 如果新Activity采用了透明主題缚俏,那么當前Activity不會回調(diào)onStop()惊搏。
-
異常情況:
-
資源相關的系統(tǒng)配置發(fā)生改變導致Activity被殺死并重建(例如旋轉屏幕引起系統(tǒng)配置發(fā)生改變),Activity先正常退出忧换,再重新創(chuàng)建恬惯。
UnusuallyRestartActivity.png
- 系統(tǒng)會調(diào)用onSaveInstanceState()保存當前Activity的狀態(tài),并在onStop()之前調(diào)用亚茬。
- Activity重建時會調(diào)用onRestoreInstanceState()或者onCreate()恢復數(shù)據(jù)酪耳。onRestoreInstanceState()是在onStart()之后調(diào)用。
-
對于onSaveInstanceState()的調(diào)用才写,個人理解為Activity除了即將被銷毀并且有機會重新顯示的情況下會被調(diào)用(比如手機旋轉引起Activity重建)葡兑,還有正常停止但也有機會重新顯示的情況下也會被調(diào)用(比如跳轉到里新的Activity)
GotoNewActivity (2).png
- 資源內(nèi)存不足導致低優(yōu)先級的Activity被殺死,其數(shù)據(jù)存儲和恢復過程和上述完全一致赞草。
-
Activity按照優(yōu)先級從高到低讹堤,可以分以下三種:
(1). 前臺Activity —— 正在和用戶交互的Activity,優(yōu)先級最高厨疙。
(2). 可見但非前臺Activity —— 比如Activity中彈出了一個對話框洲守,導致Activity可見但是位于后臺無法和用戶直接交互。
(3). 后臺Activity —— 已經(jīng)暫停的Activity沾凄,比如執(zhí)行了onStop梗醇,優(yōu)先級最低。
- 在AndroidManifest.xml文件里給Activity指定configChanges屬性可以設置它不用重新創(chuàng)建撒蟀。
android:configChages="orientation"
- 常用的configChanges屬性有l(wèi)ocale叙谨、orientation和keyboardHidden。還需注意screenSize和smallestScreenSize保屯。
項目 | 含義 |
---|---|
locale | 設備的本地位置發(fā)生了改變手负,一般指切換了系統(tǒng)語言 |
keyboardHidden | 鍵盤類型的可訪問性發(fā)生了改變涤垫,比如用戶調(diào)出了鍵盤 |
orientation | 屏幕方向發(fā)生了改變,比如旋轉了手機屏幕 |
screenSize | 當屏幕的尺寸信息發(fā)生了改變竟终,但旋轉設備屏幕時蝠猬,屏幕尺寸會發(fā)生變化,這個選線比較特殊统捶,它和編譯選項有關榆芦,但編譯選項中的minSdkVersion和tartgetSdkVersion均低于13時,此選項不會導致Activity重啟喘鸟,否則會導致Activity重啟(API 13新添加) |
smallestScreenSize | 設備的物理屏幕尺寸發(fā)生了改變匆绣,這個項目和屏幕方向沒關系,僅僅表示在實際的物理屏幕的尺寸改變的時候發(fā)生什黑,比如用戶切換到了外部的顯示設備.這個選項和screenSize一樣犬绒,但編譯選項中的minSdkVersion和tartgetSdkVersion均低于13時,此選項不會導致Activity重啟兑凿,否則會導致Activity重啟(API 13新添加) |