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接口

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

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

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

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

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

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

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)方法

后面最重要的是生命周期狀態(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()

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

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