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);
    

源码结构

jetpack探究之Lifecycles_第1张图片

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

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

jetpack探究之Lifecycles_第2张图片

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

你可能感兴趣的:(android,jetpack)