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

介绍Jetpack:

  • Google在18年10月到19年提出的,旨在提高安卓程序员在开发应用时的一些体验问题。
  • 像iOS一样,在他们的编程世界里,他们的语言是统一的,架构是统一的,工作流也是统一的

image.png

Lifecycle:

Lifecycle有什么用?

  • 是为activity和fragment的生命周期做了一个很好的工具,去观测这些生命周期
  • 让观测生命周期的代码不用写到activity里面了,避免过多的代码量和耦合性

Lifecycle是什么?

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

image.png

  • 首先,了解事物的本质

image.png

Lifecycle怎么用?

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

image.png

image.png

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

image.png

  • 我们想要观察activity生命周期需要怎么做呢?
    • 我们需要编写一个方法,方法名随意

image.png

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

image.png

image.png

过一下源码

  • 先看在activity里面是怎么实现的?
    • ComponentActivity实现了LifecycleOwner接口,
    • 提供一个getLifecycle的方法
      • 这个方法返回的是LifecycleRegistry(注册者、登记者)

image.png

  • LifecycleRegistry就是一个Lifecycle

image.png

  • 同样有他的add,remove方法
  • 他是怎么感应activity的周期的呢?然后调用setState,setCurrentState方法的呢?
    • 在他的ComponentActivity的onCreat里面找这个东西
    • 他们在包里面是平级的,肯定有关系

image.png

image.png

  • ReportFragment是一个Fragment

image.png

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

image.png

  • 然后在什么周期中dispatch

image.png

  • dispatch将消息传递到Lifecycle

image.png

  • 所以Lifecycle实际是通过
    • 创建一个Fragment
    • 将Fragment注入到被绑定的Activity里面
    • 通过Fragment将生命周期的变化发送给监听者
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享