热点新闻
LifeCycle详解
2023-07-05 13:33  浏览:952  搜索引擎搜索“广企汇”
温馨提示:为防找不到此信息,请务必收藏信息以备急用! 联系我时,请说明是在广企汇看到的信息,谢谢。
展会发布 展会网站大全 报名观展合作 软文发布

LifeCycle的由来

解耦是为了解决传统开发某块臃肿,以达到代码量平衡、优雅、易扩展。由于Android大部分开发需要感知组件的生命周期,在对应生命周期中做对应的工作,故原始的做法就是在Activity、Fragment、Service等生命周期回调中增加相应的处理代码,这样导致Activity等组件十分臃肿、难以做扩展。LifeCycle的出现就是在外面实现对这些组件生命周期的感知能力,减少组件中的代码量。

LifeCycle的使用

在Activity、Fragment中的使用

简单新建一个生命周期感知监听器,如下图,该类需要实现LifecycleObserver接口




图1

首先在Activity中使用该接口,使用非常简单,只要两行代码就够了




图2

下面就是见证奇迹的时候,这样解耦就完成了




图3

在Fragment里面实现也非常简单,只用在Fragment里面做Activity同样的工作




图4

在Service中的使用

service中使用非常简单,纯了添加LifeCycleExampleListener监听器外,Service需要继承LifecycleService




图5

Application中的使用

application中使用非常简单,不过LifeCycleExampleListener是添加到全局的ProcessLifecycleOwner里面,这样就可以很方便的感知应用进程在前台还是后台了




图6

LifeCycle原理

现以Application为例,其实里面所有的原理都是一样,ProcessLifecycleOwner.get().getLifecycle().addObserver最终实现类为LifecycleRegistry,addObserver方法如下




图7

new ObserverWithState(observer, initialState)->Lifecycling.lifecycleEventObserver(observer),如下图所示,其实就是根据不同Observer的实现方式做适配,当为图1注解时,会动态生成对应的回调方法




图8

后面最重要的是生命周期状态改变事件的分发statefulObserver.dispatchEvent(lifecycleOwner, upEvent(statefulObserver.mState)),这样就实现了初始状态的监听,那Application生命周期改变是如何通知这些观察者的呢?主要的实现在ProcessLifecycleOwner类,其中生命周期感应在attachapp.registerActivityLifecycleCallbacks(接口中感应,当有activity启动时执行activityStarted->mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_START)->moveToState(next)->sync()




图9

sync()代码如下,经过backwardPass或者forwardPass将生命周期事件传递给观测者,两个方法里面都是通过observer.dispatchEvent(l)实现




图10

这样,LifeCycle就实现了动态感知生命周期,且不会造成内存泄漏,因为LifecycleRegistry都是弱引用LifecycleRegistry(包括Activity、Fragment、Service等)




图11

发布人:3577****    IP:117.173.23.***     举报/删稿
展会推荐
让朕来说2句
评论
收藏
点赞
转发