LifeCycle詳解

LifeCycle的由來

解耦是為了解決傳統(tǒng)開發(fā)某塊臃腫,以達(dá)到代碼量平衡、優(yōu)雅、易擴(kuò)展。由于Android大部分開發(fā)需要感知組件的生命周期,在對應(yīng)生命周期中做對應(yīng)的工作,故原始的做法就是在Activity、Fragment、Service等生命周期回調(diào)中增加相應(yīng)的處理代碼,這樣導(dǎo)致Activity等組件十分臃腫、難以做擴(kuò)展。LifeCycle的出現(xiàn)就是在外面實(shí)現(xiàn)對這些組件生命周期的感知能力,減少組件中的代碼量。

LifeCycle的使用

在Activity、Fragment中的使用

簡單新建一個(gè)生命周期感知監(jiān)聽器,如下圖,該類需要實(shí)現(xiàn)LifecycleObserver接口

圖1

首先在Activity中使用該接口,使用非常簡單,只要兩行代碼就夠了

圖2

下面就是見證奇跡的時(shí)候,這樣解耦就完成了

圖3

在Fragment里面實(shí)現(xiàn)也非常簡單,只用在Fragment里面做Activity同樣的工作

圖4

在Service中的使用

service中使用非常簡單,純了添加LifeCycleExampleListener監(jiān)聽器外,Service需要繼承LifecycleService

圖5

Application中的使用

application中使用非常簡單,不過LifeCycleExampleListener是添加到全局的ProcessLifecycleOwner里面,這樣就可以很方便的感知應(yīng)用進(jìn)程在前臺還是后臺了

圖6

LifeCycle原理

現(xiàn)以Application為例,其實(shí)里面所有的原理都是一樣,ProcessLifecycleOwner.get().getLifecycle().addObserver最終實(shí)現(xiàn)類為LifecycleRegistry,addObserver方法如下

圖7

new ObserverWithState(observer, initialState)->Lifecycling.lifecycleEventObserver(observer),如下圖所示,其實(shí)就是根據(jù)不同Observer的實(shí)現(xiàn)方式做適配,當(dāng)為圖1注解時(shí),會動(dòng)態(tài)生成對應(yīng)的回調(diào)方法

圖8

后面最重要的是生命周期狀態(tài)改變事件的分發(fā)statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState)),這樣就實(shí)現(xiàn)了初始狀態(tài)的監(jiān)聽,那Application生命周期改變是如何通知這些觀察者的呢?主要的實(shí)現(xiàn)在ProcessLifecycleOwner類,其中生命周期感應(yīng)在attachapp.registerActivityLifecycleCallbacks(接口中感應(yīng),當(dāng)有activity啟動(dòng)時(shí)執(zhí)行activityStarted->mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)->moveToState(next)->sync()

圖9

sync()代碼如下,經(jīng)過backwardPass或者forwardPass將生命周期事件傳遞給觀測者,兩個(gè)方法里面都是通過observer.dispatchEvent(l)實(shí)現(xiàn)

圖10

這樣,LifeCycle就實(shí)現(xiàn)了動(dòng)態(tài)感知生命周期,且不會造成內(nèi)存泄漏,因?yàn)長ifecycleRegistry都是弱引用LifecycleRegistry(包括Activity、Fragment、Service等)

圖11
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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