Android生命周期

Android生命周期大概分為兩種情況:

  • 正常情況
    AndroidLifeCycle.jpg
    1. 第一次啟動(dòng),回調(diào)如下:onCreate --> onStart --> onResume.
    2. 退出或者銷(xiāo)毀Activity,回調(diào)如下:onPause --> onStop --> onDestroy.
    3. 打開(kāi)一個(gè)新的Activity,舊Activity會(huì)先調(diào)用onPause(), 然后再啟動(dòng)新的Activity。回調(diào)如下:


      GotoNewActivity.png
    4. 從新Activity返回舊Activity時(shí),也是新Activity先調(diào)用onPause(),然后等舊Activity回調(diào)onRestart() --> onStart() --> onResume()啟動(dòng)后,新Activity再銷(xiāo)毀。


      ReturnToOldActivity.png
    5. 如果新Activity采用了透明主題,那么當(dāng)前Activity不會(huì)回調(diào)onStop()。
  • 異常情況
    1. 資源相關(guān)的系統(tǒng)配置發(fā)生改變導(dǎo)致Activity被殺死并重建(例如旋轉(zhuǎn)屏幕引起系統(tǒng)配置發(fā)生改變),Activity先正常退出,再重新創(chuàng)建。


      UnusuallyRestartActivity.png
    • 系統(tǒng)會(huì)調(diào)用onSaveInstanceState()保存當(dāng)前Activity的狀態(tài),并在onStop()之前調(diào)用。
    • Activity重建時(shí)會(huì)調(diào)用onRestoreInstanceState()或者onCreate()恢復(fù)數(shù)據(jù)。onRestoreInstanceState()是在onStart()之后調(diào)用。
    • 對(duì)于onSaveInstanceState()的調(diào)用,個(gè)人理解為Activity除了即將被銷(xiāo)毀并且有機(jī)會(huì)重新顯示的情況下會(huì)被調(diào)用(比如手機(jī)旋轉(zhuǎn)引起Activity重建),還有正常停止但也有機(jī)會(huì)重新顯示的情況下也會(huì)被調(diào)用(比如跳轉(zhuǎn)到里新的Activity)


      GotoNewActivity (2).png
    1. 資源內(nèi)存不足導(dǎo)致低優(yōu)先級(jí)的Activity被殺死,其數(shù)據(jù)存儲(chǔ)和恢復(fù)過(guò)程和上述完全一致。

Activity按照優(yōu)先級(jí)從高到低,可以分以下三種:
(1). 前臺(tái)Activity —— 正在和用戶(hù)交互的Activity,優(yōu)先級(jí)最高。
(2). 可見(jiàn)但非前臺(tái)Activity —— 比如Activity中彈出了一個(gè)對(duì)話(huà)框,導(dǎo)致Activity可見(jiàn)但是位于后臺(tái)無(wú)法和用戶(hù)直接交互。
(3). 后臺(tái)Activity —— 已經(jīng)暫停的Activity,比如執(zhí)行了onStop,優(yōu)先級(jí)最低。

  • 在A(yíng)ndroidManifest.xml文件里給Activity指定configChanges屬性可以設(shè)置它不用重新創(chuàng)建。
android:configChages="orientation"
  • 常用的configChanges屬性有l(wèi)ocale、orientation和keyboardHidden。還需注意screenSize和smallestScreenSize。
項(xiàng)目 含義
locale 設(shè)備的本地位置發(fā)生了改變,一般指切換了系統(tǒng)語(yǔ)言
keyboardHidden 鍵盤(pán)類(lèi)型的可訪(fǎng)問(wèn)性發(fā)生了改變,比如用戶(hù)調(diào)出了鍵盤(pán)
orientation 屏幕方向發(fā)生了改變,比如旋轉(zhuǎn)了手機(jī)屏幕
screenSize 當(dāng)屏幕的尺寸信息發(fā)生了改變,但旋轉(zhuǎn)設(shè)備屏幕時(shí),屏幕尺寸會(huì)發(fā)生變化,這個(gè)選線(xiàn)比較特殊,它和編譯選項(xiàng)有關(guān),但編譯選項(xiàng)中的minSdkVersion和tartgetSdkVersion均低于13時(shí),此選項(xiàng)不會(huì)導(dǎo)致Activity重啟,否則會(huì)導(dǎo)致Activity重啟(API 13新添加)
smallestScreenSize 設(shè)備的物理屏幕尺寸發(fā)生了改變,這個(gè)項(xiàng)目和屏幕方向沒(méi)關(guān)系,僅僅表示在實(shí)際的物理屏幕的尺寸改變的時(shí)候發(fā)生,比如用戶(hù)切換到了外部的顯示設(shè)備.這個(gè)選項(xiàng)和screenSize一樣,但編譯選項(xiàng)中的minSdkVersion和tartgetSdkVersion均低于13時(shí),此選項(xiàng)不會(huì)導(dǎo)致Activity重啟,否則會(huì)導(dǎo)致Activity重啟(API 13新添加)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android的生命周期 典型情況下的生命周期 如上圖所示,正常情況下,Activity會(huì)經(jīng)歷以下的生命周期 1....
    houlucky閱讀 1,082評(píng)論 0 3
  • 生命周期與程序的健壯性有著密不可分的關(guān)系 Activity的生命周期 Fragment的生命周期 Service的...
    西瓜太郎123閱讀 5,324評(píng)論 0 15
  • 轉(zhuǎn)自Android四大基本組件介紹與生命周期A(yíng)ndroid四大基本組件分別是Activity,Service服務(wù),...
    開(kāi)子的私家地閱讀 1,588評(píng)論 0 5
  • 老生常談 這是一個(gè)大家都知道的圖 1 oncreat 表示activity正在被創(chuàng)建 2 onRestart 表示...
    品味與回味閱讀 241評(píng)論 0 0
  • 身邊的一個(gè)朋友跟著領(lǐng)導(dǎo)干了幾年,現(xiàn)在領(lǐng)導(dǎo)要退了,我問(wèn)他:你去哪里,怎么打算?他回答的很無(wú)奈:還在等領(lǐng)導(dǎo)的安排,去哪...
    處處1閱讀 9,094評(píng)論 18 219

友情鏈接更多精彩內(nèi)容