Android入門教程之組件Activity的生命周期詳解
返回棧
Android 中的 Activity 是可以層疊的,我們每啟動(dòng)一個(gè)新的 Activity,就會(huì)覆蓋在原有的 Activity 之上,然后點(diǎn)擊 Back 鍵會(huì)銷毀最上面的 Activity,下面的一個(gè) Activity 就會(huì)重新顯示出來
其實(shí) Android 是使用任務(wù)(task)來管理 Activity 的,一個(gè)任務(wù)就是一組存放在棧里的 Activity 的集合,這個(gè)棧也被稱作返回棧
默認(rèn)情況下,啟動(dòng)一個(gè)新的 Activity,它就會(huì)在返回棧中入棧,并處于棧頂?shù)奈恢?。而每?dāng)我們按下 Back 鍵或調(diào)用 finish() 方法銷毀一個(gè) Activity 時(shí),處于棧頂?shù)?Activity 就會(huì)出棧,前一個(gè)入棧的 Activity 就會(huì)重新處于棧頂?shù)奈恢?。系統(tǒng)總是會(huì)顯示處于棧頂?shù)?Activity 給用戶
Activity 狀態(tài)
每個(gè) Activity 在其生命周期中最多可能有四種狀態(tài):
1. 運(yùn)行狀態(tài)
當(dāng)一個(gè) Activity 位于返回棧的棧頂時(shí),Activity 就處于運(yùn)行狀態(tài)
2. 暫停狀態(tài)
當(dāng)一個(gè) Activity 不再處于棧頂位置,但仍然可見時(shí),Activity 就進(jìn)入了暫停狀態(tài)
3. 停止?fàn)顟B(tài)
當(dāng)一個(gè) Activity 不再處于棧頂位置,并且完全不可見時(shí),就進(jìn)入了停止?fàn)顟B(tài)
4. 銷毀狀態(tài)
一個(gè) Activity 從返回棧中移除后就變成了銷毀狀態(tài)
Activity 的生存期
Activity 類中定義了七個(gè)回調(diào)方法,覆蓋了 Activity 生命周期的每一個(gè)環(huán)節(jié):
onCreate()
它會(huì)在 Activity 第一次被創(chuàng)建時(shí)調(diào)用,可以在這個(gè)方法中完成 Activity 的初始化操作,比如加載布局、綁定事件等
onStart()
這個(gè)方法在 Activity 由不可見變?yōu)榭梢姷臅r(shí)候調(diào)用
onResume()
這個(gè)方法在 Activity 準(zhǔn)備好和用戶進(jìn)行交互時(shí)調(diào)用,此時(shí)的 Activity 一定位于返回棧的棧頂,并且處于運(yùn)行狀態(tài)
onPause()
這個(gè)方法在系統(tǒng)準(zhǔn)備去啟動(dòng)或者恢復(fù)另一個(gè) Activity 的時(shí)候調(diào)用,我們通常會(huì)在這個(gè)方法將一些消耗 CPU 的資源釋放掉,以及保存一些關(guān)鍵數(shù)據(jù),但這個(gè)方法的執(zhí)行速度一定要快,不然會(huì)影響到新的棧頂 Activity 的使用
onStop()
這個(gè)方法在 Activity 完全不可見的時(shí)候調(diào)用,它和 onPause() 方法的主要區(qū)別在于,如果啟動(dòng)的新的 Activity 是一個(gè)對(duì)話框式的 Activity,那么 onPause() 方法會(huì)得到執(zhí)行,而 onStop() 方法并不會(huì)執(zhí)行
onDestroy()
這個(gè)方法在 Activity 被銷毀之前調(diào)用,之后 Activity 的狀態(tài)將變?yōu)殇N毀狀態(tài)
onRestart()
這個(gè)方法在 Activity 由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是 Activity 被重新啟動(dòng)了
以上七個(gè)方法中除了 onRestart() 方法,其他都是兩兩相對(duì)的,從而又可以將 Activity 分為以下三種生存期:
完整生存期
Activity 在 onCreate() 方法和 onDestroy() 方法之間所經(jīng)歷的就是完整生存期。一般情況下,一個(gè) Activity 會(huì)在 onCreate() 方法中完成各種初始化操作,而在 onDestroy() 方法中完成釋放內(nèi)存的操作
可見生存期
Activity 在 onStart() 方法和 onStop() 方法之間所經(jīng)歷的就是可見生存期。在可見生存期內(nèi),Activity 對(duì)于用戶總是可見的,即便有可能無法和用戶進(jìn)行交互。我們可以通過這兩個(gè)方法合理地管理那些對(duì)用戶可見的資源。比如在 onStart() 方法中對(duì)資源進(jìn)行加載,而在 onStop() 方法中對(duì)資源進(jìn)行釋放,從而保證處于停止?fàn)顟B(tài)的 Activity 不會(huì)占用過多內(nèi)存
前臺(tái)生存期
Activity 在 onResume() 方法和 onPause() 方法之間所經(jīng)歷的就是前臺(tái)生存期。在前臺(tái)生存期內(nèi),Activity 總是運(yùn)行狀態(tài),此時(shí)的 Activity 是可以和用戶進(jìn)行交互的,我們平時(shí)看到的和接觸最多的就是這個(gè)狀態(tài)下的 Activity

Activity 回收處理
當(dāng)一個(gè) Activity 進(jìn)入了停止?fàn)顟B(tài),是有可能被系統(tǒng)回收的。如果一個(gè) Activity 由于系統(tǒng)內(nèi)存不足而被回收,用戶再返回該 Activity 時(shí),其實(shí)還是會(huì)正常顯示的,但這時(shí)并不會(huì)執(zhí)行 onRestart() 方法,而是會(huì)執(zhí)行 Activity 的 onCreate() 方法,因?yàn)?Activity 在這種情況下會(huì)被重新創(chuàng)建一次
如果 Activity 存在臨時(shí)數(shù)據(jù)和狀態(tài),比如文本輸入框已經(jīng)輸入了一段文字,回來以后文字都沒了,那這是比較影響用戶體驗(yàn)的。Activity 提供了一個(gè) onSaveInstanceState() 回調(diào)方法,該方法可以保證在 Activity 被回收之前一定會(huì)被調(diào)用,可以通過這個(gè)方法來解決這個(gè)問題
onSaveInstanceState() 方法會(huì)攜帶一個(gè) Bundle 類型的參數(shù),Bundle 提供了一系列的方法用于保存數(shù)據(jù)
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
var tempData = "Something you just typed"
outState.putString("data_key", tempData)
}
數(shù)據(jù)保存以后,在 onCreate() 方法有一個(gè) Bundle 類型參數(shù),該參數(shù)帶有之前保存的全部數(shù)據(jù),只需再通過相應(yīng)的取值方法將數(shù)據(jù)取出即可
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (savedInstanceState != null) {
val tempData = savedInstanceState.getString("data_key")
}
}
到此這篇關(guān)于Android入門教程之組件Activity的生命周期詳解的文章就介紹到這了,更多相關(guān)Android Activity內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 超詳細(xì)深刨Activity Result API的使用
這篇文章主要介紹了Android開發(fā)中Activity Result API的使用,掌握了它以后你就可以放棄startActivityForResult了,感興趣的朋友一起來看看吧2022-03-03
Android Studio打包.so庫到apk中實(shí)例詳解
這篇文章主要介紹了Android Studio打包.so庫到apk中實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android Studio手動(dòng)配置Gradle的方法
Gradle:Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化建構(gòu)工具。它使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項(xiàng)目設(shè)置,拋棄了基于XML的各種繁瑣配置,本文給大家介紹Android Studio手動(dòng)配置Gradle的方法,一起看看吧2017-11-11
Kotlin Option與Either及Result實(shí)現(xiàn)異常處理詳解
Kotlin異常處理,異常是在程序運(yùn)行時(shí)可能發(fā)生的不必要的問題,并突然終止您的程序。異常處理是一個(gè)過程,使用它可以防止程序出現(xiàn)可能破壞我們代碼的異常2022-12-12
Android TextView 設(shè)置字體大小的方法
這篇文章主要介紹了Android TextView 設(shè)置字體大小的方法的相關(guān)資料,需要的朋友可以參考下2016-02-02
Android編程中Handler原理及用法實(shí)例分析
這篇文章主要介紹了Android編程中Handler用法,結(jié)合實(shí)例形式分析了Handler的功能,原理及使用技巧,需要的朋友可以參考下2016-01-01
Android編程之自定義AlertDialog(退出提示框)用法實(shí)例
這篇文章主要介紹了Android編程之自定義AlertDialog(退出提示框)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了自定義AlertDialog的頁面布局與功能實(shí)現(xiàn)相關(guān)技巧,需要的朋友可以參考下2016-01-01
Android Recyclerview實(shí)現(xiàn)多選,單選,全選,反選,批量刪除的功能
本篇文章主要介紹了Android Recyclerview 實(shí)現(xiàn)多選,單選,全選,反選,批量刪除的功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

