Jetpack--Lifecycle使用介绍及源码分析

30 阅读3分钟
  • 让观测生命周期的代码不用写到activity里面了,避免过多的代码量和耦合性

Lifecycle是什么?

  • 从源码里拷出来,去掉注释,就剩下Lifecycle的抽象类,发现他是一个观察者

  • 首先,了解事物的本质

Lifecycle怎么用?

  • 写代码体验一下

  • 新建项目,添加第一张图右边的依赖,如果是kotlin注意要加kapt

  • 新建观察者

  • 其实可以直接实现他的父类,他的父类不要实现任何方法,而且这个方法对我们当前没有用

  • 我们想要观察activity生命周期需要怎么做呢?

  • 我们需要编写一个方法,方法名随意

  • 绑定activity

  • activity实现了Lifecycle接口,接口中有一个方法获取Lifecycle,调用他,获取lifecycle,然后绑定观察者

过一下源码

  • 先看在activity里面是怎么实现的?

  • ComponentActivity实现了LifecycleOwner接口,

  • 提供一个getLifecycle的方法

  • 这个方法返回的是LifecycleRegistry(注册者、登记者)

  • LifecycleRegistry就是一个Lifecycle

  • 同样有他的add,remove方法

  • 他是怎么感应activity的周期的呢?然后调用setState,setCurrentState方法的呢?

  • 在他的ComponentActivity的onCreat里面找这个东西

  • 他们在包里面是平级的,肯定有关系

  • ReportFragment是一个Fragment

  • 他把自己注入到了activity中,activity里面的fragment当然也会跟随activity同步他的生命周期

  • 然后在什么周期中dispatch

  • dispatch将消息传递到Lifecycle