亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android12四大組件之Activity生命周期變化詳解

 更新時間:2022年07月25日 08:35:48   作者:fundroid_方卓  
雖然說我們天天都在使用Activity,但是你真的對Activity的生命機制完全了解了嗎?Activity的生命周期方法只有七個,但是其實那只是默認(rèn)的情況。也就是說在其他情況下,Activity的生命周期可能不會是按照我們以前所知道的流程,本章著重講解Activity的生命周期變化

前言

Android12 有很多令人驚喜的變化,比如基于 Material You 的全新 UI,基于 SplashScreen 的應(yīng)用啟動畫面以及更安全的隱私設(shè)置等等,此外也有一些需要開發(fā)者注意的行為變化,比如這里介紹的 Activity 的 Lifecycle 上的變化

點擊返回鍵Activity不在onDestroy

Android 12 以前,當(dāng)我們處于 Root Activity 時,點擊返回鍵時,應(yīng)用返回桌面, Activity 執(zhí)行 onDestroy,程序結(jié)束。 Android 12 起同樣場景下 Activity 只會 onStop,不再執(zhí)行 onDestroy。

通過下面代碼進行驗證:

class LifecycleLogObserver : LifecycleEventObserver {
    override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        Log.d(source::class.java.simpleName, event.name)
    }
}
class SampleActivity: AppCompatActivity() {
    init {
        lifecycle.addObserver(LifecycleLogObserver())
    }
}

啟動 Activity,按下返回鍵后,重新打開 App。首先 Android12 之前的設(shè)備,Log 如下:

// 初次啟動
D/SampleActivity: ON_CREATE
D/SampleActivity: ON_START
D/SampleActivity: ON_RESUME
// 返回桌面
D/SampleActivity: ON_PAUSE
D/SampleActivity: ON_STOP
D/SampleActivity: ON_DESTROY
// 再次啟動
D/SampleActivity: ON_CREATE
D/SampleActivity: ON_START
D/SampleActivity: ON_RESUME

再開 Android12 之后的設(shè)備:

// 初次啟動
D/SampleActivity: ON_CREATE
D/SampleActivity: ON_START
D/SampleActivity: ON_RESUME
// 返回桌面
D/SampleActivity: ON_PAUSE
D/SampleActivity: ON_STOP
// 再次啟動
D/SampleActivity: ON_START
D/SampleActivity: ON_RESUME

我們知道 ViewModel 的銷毀在 onDestroy 中,這樣改動后 ViewModel 中的狀態(tài)可以保存,再次啟動后可以直接使用。對于使用者來說直接感受就是冷啟動變?yōu)榱藷釂?,啟動速度更快?/p>

注意:所謂 Root Activity 就是我們在 AndroidManifest 中配置了 IntentFilter 為 ACTION_MAIN 和 CATEGORY_LAUNCHER 的入口 Activity,其他 Activity 點擊返回鍵后行為不變,依然會 onDestroy

重新onBackPressed時的注意點

如果你的應(yīng)用在 Android12 中沒有上述變化,那很有可能是你重寫了 onBackPressed 并手動調(diào)用了 finish(),為了在行為上符合 Android12 的預(yù)期,需要修改如下:

class SampleActivity : AppCompatActivity() {
    private var flag = true
    override fun onBackPressed() {
        if (flag) {
            flag = false
            TODO("do sth business")
            return
        }
		//Don't call finish()
        super.onBackPressed()
    }
}

當(dāng)然,官方已不再推薦重寫 onBackPressed 了,更好的做法使用 AndroidX 的 OnBackPressedCallback 重寫你的實現(xiàn),它會自動適配 Android12 的變化。

class SampleActivity : AppCompatActivity() {
    private val onBackPressedCallback: OnBackPressedCallback =
        object : OnBackPressedCallback(true) {
            override fun handleOnBackPressed() {
                TODO("do sth business")
                //處理自定義業(yè)務(wù)后,后續(xù)返回鍵交回系統(tǒng)處理
                onBackPressedCallback.isEnabled = false
            }
        }
}

總結(jié)

隨著手機內(nèi)存的增大,相比起資源的及時釋放,用戶體驗變得更加重要,這也會為什么 Android12 會引入這次的變化。這次變化也讓 onStop 的重要性得以提升,我們要更加區(qū)分 onStop 與 onDestroy 在使用場景上的不同:onDestroy 負(fù)責(zé)必要的資源釋放,而其余類似活躍狀態(tài)的切換應(yīng)該放在 onStart/onStop 中進行,這符合 androidx-lifecycle 的基本思想。

到此這篇關(guān)于Android12四大組件之Activity生命周期變化詳解的文章就介紹到這了,更多相關(guān)Android Activity生命周期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論