皮皮网

【友链系统源码】【婚礼商城源码】【appHTML源码查看】activity 源码下载

2024-11-27 10:41:47 来源:筹码沉积公式源码

1.Lifecycle源码解析

activity 源码下载

Lifecycle源码解析

       作者:Gs 转载地址: /post/

       1、源码猜想

       如果是下载我们实现Lifecycle的功能,我们会如何设计?

       2、源码入口

       既然Activity或者Fragment作为生命周期的下载所有者,并且在他们中增加了LifecycleObserver,源码那么我们就从Activity或者Fragment作为探索Lifecycle原理的下载友链系统源码入口。在Activity或者Fragment中使用Lifecycle时,源码我们通常会看到如下代码:

       我们进入getLifecycle()方法。下载注:以Activity中的源码代码为例。

       这是下载Activity的父类ComponentActivity中的代码:

       getLifecycle()返回的mLifecycleRegistry,直接使用new创建。源码

       LifecycleRegistry的下载构造方法必须传递LifecycleOwner参数。而ComponentActivity已经实现了LifecycleOwner接口,源码婚礼商城源码所以可以直接

       LifecycleOwner接口很简单,下载只有一个getLifecycle()抽象方法。源码

       所以我们的Activity或者Fragment作为生命周期的所有者,同时也实现了LifecycleOwner接口,通过getLifecycle()方法获取LifecycleRegistry对象,LifecycleRegistry也就是appHTML源码查看实现生命周期分发的类。

       LifecycleRegistry在lifecycle-runtime包中。

       3、生命周期事件分发

       我们看到Activity的父类ComponentActivity实现了LifecycleOwner接口,并且创建了LifecycleRegistry对象。那么生命周期的分发也应该在ComponentActivity的各个生命周期方法中吧。然而,读写内存源码我们看到ComponentActivity中只复写了onCreate()方法,没有其他生命周期方法。

       里面有一句代码

       ReportFragment不是在上面中和LifecycleRegistry在lifecycle-runtime包中一起出现的吗?所以ReportFragment一定是为了实现Lifecycle功能。

       injectIfNeededIn()方法很简单,就是创建ReportFragment加入到Activity中。但是外卖商店源码它里面包含了各个生命周期方法,而且都调用了分发方法dispatch()。参数就是我们在自定义LifecycleObserver中给方法加的注释事件。

       至此,我们找到了生命周期事件的分发方法dispatch(Event event),方法内部使用LifecycleRegistry的handleLifecycleEvent(event)分发事件。上面我们也说过LifecycleRegistry就是实现生命周期分发的类。而ReportFragment的作用就是获取生命周期而已,因为Fragment生命周期是依附Activity的。好处是把这部分逻辑抽离出来,实现Activity的无侵入。如果你对加载库Glide比较熟悉,就会知道它也是使用透明Fragment获取生命周期的。

       4、生命周期事件处理

       LifecycleRegistry继承自Lifecycle。

       Lifecycle使用两种主要枚举跟踪其关联组件的生命周期状态:

       Event触发的时机:

       您可以将状态看作图中的节点,将事件看作这些节点之间的边。上一节中,我们知道ReportFragment生命周期发生变化时,都会调用LifecycleRegistry中的handleLifecycleEvent()方法。因此,我们先看一下handleLifecycleEvent()方法。