Android 生命周期是指一個(gè) Android 組件(如Activity、Fragment、Service等)從創(chuàng)建到銷毀的整個(gè)過(guò)程。它包含了一系列的生命周期方法,這些方法會(huì)在特定的時(shí)機(jī)被系統(tǒng)調(diào)用。通過(guò)理解和掌握這些生命周期方法的執(zhí)行順序,就可以在不同的階段執(zhí)行適當(dāng)?shù)牟僮?,如初始化UI、獲取資源、保存數(shù)據(jù)等。
1. 生命周期的回調(diào)方法
- onCreate:在組件被創(chuàng)建時(shí)調(diào)用,通常用于進(jìn)行初始化操作。生命周期的第一個(gè)方法,當(dāng)打開(kāi)一個(gè)activity時(shí)首先回調(diào)這個(gè)方法。在這個(gè)方法中一般做一些初始化工作,例如加載界面布局資源(setContentView)、數(shù)據(jù)初始化(findviewbyid);
- onStart:表示Activity正在被啟動(dòng),在組件可見(jiàn)但還未獲取到焦點(diǎn)時(shí)調(diào)用。Activity可見(jiàn),未出現(xiàn)在前臺(tái)??梢岳斫鉃锳ctivity已經(jīng)顯示出來(lái)了,但是我們看不到,不能與之交互。
- onRestart:在組件重啟時(shí)調(diào)用,表示Activity正在被重新啟動(dòng)。當(dāng)前Activity從不可見(jiàn)變?yōu)榭梢?jiàn)狀態(tài)時(shí)這個(gè)方法就會(huì)回調(diào)。一般是用戶行為導(dǎo)致,比如用戶摁home鍵回到桌面,當(dāng)用戶再次回到本Activity時(shí),當(dāng)前Activity走 onRestart->onStart->onResume;
- onResume:在組件獲得焦點(diǎn)并可與用戶交互時(shí)調(diào)用,表示Activity已經(jīng)可見(jiàn),并且出現(xiàn)在前臺(tái),可以與用戶進(jìn)行交互。例如Activity上有Button,此時(shí)我們就可以進(jìn)行點(diǎn)擊了;
- onPause:在組件失去焦點(diǎn)但仍可部分可見(jiàn)時(shí)調(diào)用,用于暫?;蜥尫乓恍┵Y源。表示Activity正在停止,從前臺(tái)被置于后臺(tái)從可見(jiàn)到不可見(jiàn)的過(guò)程,不可交互。接著很快執(zhí)行onStop。注意極端情況下,本Activity跳轉(zhuǎn)其他Activity后快速的回到當(dāng)前Activity時(shí),當(dāng)前Activity的生命周期:onPause->onResume。但是這個(gè)“快速回到”要很快,一般情況下都是onPause->onStop->onRestart->onStart->onResume。這里不能做太耗時(shí)操作,可以做一些數(shù)據(jù)存儲(chǔ),動(dòng)畫停止工作;
- onStop:在組件完全不可見(jiàn)時(shí)調(diào)用,表示Activity停止,可以做一些回收清理工作。但是不能太耗時(shí);
- onDestroy :在組件被銷毀前調(diào)用,Activity被銷毀 ,Activity生命周期最后一個(gè)回調(diào),這里可以做一些回收工作,釋放所有的資源和引用。
從整個(gè)生命周期來(lái)說(shuō)onCreate和onDestroy 是配對(duì)的,分別代表著Activity的創(chuàng)建和銷毀。并且只可能調(diào)用一次;
從Activity是否可見(jiàn)來(lái)說(shuō)onStart和onStop是配對(duì)的,隨著用戶的操作兩個(gè)生命周期可能被多次執(zhí)行;
從Activity是否在前臺(tái)來(lái)說(shuō)onResume和onPause是配對(duì)的,隨著用戶的操作兩個(gè)生命周期可能被多次執(zhí)行。
2. 應(yīng)用的生命周期管理
管理應(yīng)用程序的生命周期是確保應(yīng)用程序正常運(yùn)行和提供良好用戶體驗(yàn)的關(guān)鍵。以下是一些常見(jiàn)的生命周期管理技巧:
- 在onPause()和onResume()方法中釋放和重新獲取資源,如停止和重新啟動(dòng)動(dòng)畫、釋放和重新注冊(cè)廣播接收器等。
- 在onSaveInstanceState()方法中保存和恢復(fù)重要的數(shù)據(jù),以應(yīng)對(duì)配置變化或系統(tǒng)恢復(fù)應(yīng)用狀態(tài)的情況。
- 合理處理異步操作,確保在合適的時(shí)機(jī)取消或暫停任務(wù),以避免內(nèi)存泄漏和無(wú)效的操作。
- 使用生命周期回調(diào)方法來(lái)管理后臺(tái)任務(wù),如在onStop()方法中停止后臺(tái)服務(wù),在onStart()方法中重新啟動(dòng)服務(wù)。
- 在Manifest文件中正確聲明組件的啟動(dòng)模式和配置,以確保在合適的時(shí)機(jī)啟動(dòng)和關(guān)閉組件。
應(yīng)用程序的生命周期管理是確保應(yīng)用程序正常運(yùn)行并提供良好用戶體驗(yàn)的關(guān)鍵。
2.1 釋放和重新獲取資源:
在onPause()方法中釋放資源,如停止動(dòng)畫、取消注冊(cè)廣播接收器等。這可以節(jié)省系統(tǒng)資源并提高性能。
在onResume()方法中重新獲取資源,如重新啟動(dòng)動(dòng)畫、重新注冊(cè)廣播接收器等。確保這些資源在用戶可見(jiàn)時(shí)正確地恢復(fù)。
2.2 保存和恢復(fù)重要數(shù)據(jù):
在onSaveInstanceState()方法中保存重要的數(shù)據(jù),如用戶輸入、滾動(dòng)位置等。這可以應(yīng)對(duì)配置變化(如屏幕旋轉(zhuǎn))或系統(tǒng)恢復(fù)應(yīng)用狀態(tài)的情況。
在onCreate()方法中檢查savedInstanceState參數(shù)是否為null,并根據(jù)需要恢復(fù)數(shù)據(jù)。這樣可以保持用戶在應(yīng)用程序中的連續(xù)性。
2.3 合理處理異步操作:
在進(jìn)行異步操作時(shí),確保在合適的生命周期階段取消或暫停任務(wù)。例如,在onStop()方法中停止正在進(jìn)行的網(wǎng)絡(luò)請(qǐng)求或后臺(tái)任務(wù),以避免浪費(fèi)資源或引發(fā)異常。
在onStart()方法中重新啟動(dòng)或恢復(fù)被暫停的異步任務(wù),以確保任務(wù)在適當(dāng)?shù)臅r(shí)候開(kāi)始或繼續(xù)執(zhí)行。
2.4 使用生命周期回調(diào)方法管理后臺(tái)任務(wù):
在onStop()方法中停止或暫停后臺(tái)服務(wù),以避免在應(yīng)用程序不可見(jiàn)時(shí)繼續(xù)消耗系統(tǒng)資源。
在onStart()方法中重新啟動(dòng)或恢復(fù)后臺(tái)服務(wù),以確保在應(yīng)用程序可見(jiàn)時(shí)服務(wù)正常工作。
2.5 聲明組件的啟動(dòng)模式和配置:
在AndroidManifest.xml文件中正確聲明Activity和其他組件的啟動(dòng)模式和配置。這包括設(shè)置、
等屬性,以適應(yīng)特定的需求。
通過(guò)合理配置組件的啟動(dòng)模式和處理配置變化,可以避免意外的組件重啟和數(shù)據(jù)丟失。
通過(guò)以上方法,我們可以有效地管理應(yīng)用程序的生命周期,提高應(yīng)用程序的性能、穩(wěn)定性和用戶體驗(yàn)。然而,需要根據(jù)具體的應(yīng)用程序需求和情況進(jìn)行適當(dāng)?shù)恼{(diào)整和優(yōu)化。
正確地管理應(yīng)用程序的生命周期可以提高應(yīng)用程序的性能、穩(wěn)定性和用戶體驗(yàn),并避免一些常見(jiàn)的問(wèn)題,如內(nèi)存泄漏、界面凍結(jié)等。
文章參考結(jié)合:
1,Android開(kāi)發(fā)者社區(qū)-Activity 生命周期
2,岸本熵減程序設(shè)計(jì)-Android四大基本組件介紹與生命周期
3,老王學(xué)長(zhǎng)-Android生命周期:理解與應(yīng)用