欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android入門教程之組件Activity的生命周期詳解

 更新時(shí)間:2021年10月09日 10:18:56   作者:低吟不作語  
Activity作為四大組件之一,出現(xiàn)的頻率相當(dāng)高,基本上我們在android的各個(gè)地方都能看見它的蹤影,因此深入了解Activity,對于開發(fā)高質(zhì)量應(yīng)用程序是很有幫助的。今天我們就來詳細(xì)地聊聊Activity的生命周期,以便我們在以后的開發(fā)中能如魚得水

返回棧

Android 中的 Activity 是可以層疊的,我們每啟動一個(gè)新的 Activity,就會覆蓋在原有的 Activity 之上,然后點(diǎn)擊 Back 鍵會銷毀最上面的 Activity,下面的一個(gè) Activity 就會重新顯示出來

其實(shí) Android 是使用任務(wù)(task)來管理 Activity 的,一個(gè)任務(wù)就是一組存放在棧里的 Activity 的集合,這個(gè)棧也被稱作返回棧

默認(rèn)情況下,啟動一個(gè)新的 Activity,它就會在返回棧中入棧,并處于棧頂?shù)奈恢?。而每?dāng)我們按下 Back 鍵或調(diào)用 finish() 方法銷毀一個(gè) Activity 時(shí),處于棧頂?shù)?Activity 就會出棧,前一個(gè)入棧的 Activity 就會重新處于棧頂?shù)奈恢?。系統(tǒng)總是會顯示處于棧頂?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()

它會在 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)備去啟動或者恢復(fù)另一個(gè) Activity 的時(shí)候調(diào)用,我們通常會在這個(gè)方法將一些消耗 CPU 的資源釋放掉,以及保存一些關(guān)鍵數(shù)據(jù),但這個(gè)方法的執(zhí)行速度一定要快,不然會影響到新的棧頂 Activity 的使用

onStop()

這個(gè)方法在 Activity 完全不可見的時(shí)候調(diào)用,它和 onPause() 方法的主要區(qū)別在于,如果啟動的新的 Activity 是一個(gè)對話框式的 Activity,那么 onPause() 方法會得到執(zhí)行,而 onStop() 方法并不會執(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 被重新啟動了

以上七個(gè)方法中除了 onRestart() 方法,其他都是兩兩相對的,從而又可以將 Activity 分為以下三種生存期:

完整生存期

Activity 在 onCreate() 方法和 onDestroy() 方法之間所經(jīng)歷的就是完整生存期。一般情況下,一個(gè) Activity 會在 onCreate() 方法中完成各種初始化操作,而在 onDestroy() 方法中完成釋放內(nèi)存的操作

可見生存期

Activity 在 onStart() 方法和 onStop() 方法之間所經(jīng)歷的就是可見生存期。在可見生存期內(nèi),Activity 對于用戶總是可見的,即便有可能無法和用戶進(jìn)行交互。我們可以通過這兩個(gè)方法合理地管理那些對用戶可見的資源。比如在 onStart() 方法中對資源進(jìn)行加載,而在 onStop() 方法中對資源進(jìn)行釋放,從而保證處于停止?fàn)顟B(tài)的 Activity 不會占用過多內(nèi)存

前臺生存期

Activity 在 onResume() 方法和 onPause() 方法之間所經(jīng)歷的就是前臺生存期。在前臺生存期內(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í)還是會正常顯示的,但這時(shí)并不會執(zhí)行 onRestart() 方法,而是會執(zhí)行 Activity 的 onCreate() 方法,因?yàn)?Activity 在這種情況下會被重新創(chuàng)建一次

如果 Activity 存在臨時(shí)數(shù)據(jù)和狀態(tài),比如文本輸入框已經(jīng)輸入了一段文字,回來以后文字都沒了,那這是比較影響用戶體驗(yàn)的。Activity 提供了一個(gè) onSaveInstanceState() 回調(diào)方法,該方法可以保證在 Activity 被回收之前一定會被調(diào)用,可以通過這個(gè)方法來解決這個(gè)問題

onSaveInstanceState() 方法會攜帶一個(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論