jetpack探究之Lifecycles

Lifecycles

生命周期感知型组件可执行操作来响应另一个组件(如 Activity 和 Fragment)的生命周期状态的变化

使用

  1. 新建立一个辅助类继承自LifecycleObserver,该类作为观察者,观察所在Activity或Fragment的生命周期,从而在不同时候做不同的事情。(利用的是注释的方式

    public class MyChronometer extends Chronometer  implements LifecycleObserver {
       
        public MyChronometer(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
        private void pauseMeter(){
      //
            stop();
        }
    
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        private void resumeMeter(){
        //
            start();
        }
    }
    
  2. 在Activity中观察者列表中加入目标组件

    getLifecycle().addObserver(binding.meter);
    

源码结构

在这里插入图片描述

Lifecycle是抽象类:内部有两个抽象类(Event和State),三个方法(移除/添加观察者+获得当前状态)

其实现类是LifecycleRegistry,重写了父类(Lifecycle)的添加/删除观察者的方法,且其内部直接持有当前状态

在这里插入图片描述

LifecycleObserver:该接口没有任何方法,依赖于注解的方法

LifecycleOwner:具有 Android 的生命周期,定制组件可以使用这些事件来处理生命周期更改,而无需在 Activity 或 Fragment 中实现任何代码,该接口中仅有一个方法getLifecycle()

LifecycleEventObserver:可以接收任何生命周期更改并将其分派给接收方。

源码分析

1activity生命周期

public class ComponentActivity extends androidx.core.app.ComponentActivity implements
        LifecycleOwner,
        ViewModelStoreOwner,
        SavedStateRegistryOwner,
        OnBackPressedDispatcherOwner {

ComponentActivityFragmentActivityAppCompatActivity 的基类。

既已实现LifecycleOwner,那么该类重写其唯一的方法getLifecycle()。其中返回了一个LifecycleRegistry的实例

activity 操作生命周期是通过 ReportFragment 处理的

在 ComponentActivity 的 onCreate 方法中,调用了 ReportFragment 中的静态方法 injectIfNeededIn()

2fragment生命周期处理

在 fragment 内部,每个生命周期节点调用 handleLifecycleEvent 方法

3Lifecycle State 大小比较

在Lifecycle.Event中有一个比较的方法(判断当前状态是否不小于传入的状态)

public boolean isAtLeast(@NonNull State state) {
            return compareTo(state) >= 0;
        }

State 的顺序为 DESTROYED -> INITIALIZED -> CREATED -> STARTED -> RESUMED

参考自:【背上Jetpack之Lifecycle】万物基于 Lifecycle 默默无闻大用处
https://juejin.im/post/6844904111108800519

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值