Android Component Framwork为我们解决了一些繁琐的问题,并勾勒出Android App开发的合理框架。也可以说是一种官方推荐的标准范式,使用这种范式编码,我们可以构建出可展性更强,逻辑更为清晰的App。因而在使用该种范式之前,我们有必要弄清楚该框架的设计思路。同时我们也应该高度重视框架给出的开发理念。的确,是一些基本的,核心的理念指导或者误导着我们的编码
1.LifeCycle的作用是什么?
一些对象的功能执行与Fragment,Activity的生命周期相关。这造成的后果是Activity,Fragment代码复杂,逻辑不清晰。另外,与生命周期相关的回调是系统作出的,App本身并不能掌控。对生命周期错误的响应,会使得代码出现严重问题。LifeCycle的解决方法是将Fragment,Activity的生命周期逻辑剥离出去。让关心这些生命周期的对象依赖于抽象的LifeCycle,而不是Activity和Fragement。另外,对于Activity状态的访问,Activity类并没有给出足够的接口(比如并没有isResumed,isStarted,isPaused等方法)。当然,我们可以在子类中保存当前生命周期状态(如果你不嫌麻烦的话)。所以我们需要这样一个库,为我们解决这些常规的任务--将与生命周期相关的代码剥离出Activity,还能时刻跟踪并访问Actvity状态。LifeCycle为我们做了这些。
2.探究源码实现
基本类
LifecycleOwner表示某一个类拥有生命周期,比如Activity,Fragment。
LifeCycle将生命周期抽象出来,暴露出对当前生命状态访问的接口,并管理维护对该生命周期感兴趣的观察者。
主要流程
Actvity和Fragment需要将状态分发出去。比如onCreate方法被调用时,需要通知其他对象。这表明Activity和Fragement需要管理维护观察者。实际的实现是将这一功能代理给了LifecycleRegistry。而LifecycleRegistry则继承于Lifecycle.这是典型的代理模式。Android DataBinding中大面积使用了这种模式。之前说过LifecycleRegsitry维护这观察者列表,因而当某个对象关心该生命周期时,可将自己加入到这个列表。这样当生命周期状态转换时,便可收到通知。这似乎并没有什么让人惊叹的地方,只是Lifecycle库做的更为优雅--可以通过注解的方式注解某一方法,表明该方法在注解参数所指定的事件之后执行。
3.写在后面的话
Lifecycle库只是Android component framework的一小部分,在我看来创建这个库,只是为了解决LiveData在观察者模式上的一些问题。LiveData是与生命周期相关的,他会追踪生命周期,并根据生命周期状态去决定是否通知观察者,同时也在合适的时候做清理工作。所以Lifecycle只是我们探究的第一步,开始而已,后面更精彩....