美文网首页
android Jetpack之LifeCycle的原理分析

android Jetpack之LifeCycle的原理分析

作者: android源码探索 | 来源:发表于2020-07-18 16:24 被阅读0次

我自己开发的一款填色小游戏, 运用到了很多android技术,
欢迎大家到应用市场评论下载安琪花园

介绍Lifecycle之前,首先要明白Lifecycle的用途


监听Activity 和 fragment生命周期的变化

关于LifeCycle有几个重要的类, 它们是如何串联起来实现的哟

  1. LifecycleObserver
  2. LifeCycleOwner
  3. Lifecycle
  4. LifecycleRegistry

先看一张这个图,从这张图里面能够看到activity 和 fragment里面都有生命周期方法的处理。

因此要看懂lifeCycle 的原理,可以从这几个方法出发。

image.png

第一步: lifeCycle如何使用

getLifecycle().addObserver(new CustomLifecycle());

// 观察者角色
// 监听Activity/Fragment 所有生命周期函数
public class CustomLifecycle implements LifecycleObserver {

    private static final String TAG = CustomLifecycle.class.getSimpleName();

    // 监听 onCreate 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreateMethod() {
        Log.d(TAG, "onCreate生命周期函数执行了...");
    }

    // 监听 onStart 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStartMethod() {
        Log.d(TAG, "onStart生命周期函数执行了...");
    }

    // 监听 onStop 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStopMethod() {
        Log.d(TAG, "onStop生命周期函数执行了...");
    }

    // 监听 onResume 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResumeMethod() {
        Log.d(TAG, "onResume生命周期函数执行了...");
    }

    // 监听 onResume 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPauseMethod() {
        Log.d(TAG, "onPause生命周期函数执行了...");
    }

    // 监听 onDestroy 生命时候被执行
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroyMethod() {
        Log.d(TAG, "onDestroy生命周期函数执行了...");
    }
}

这样当activity或者Fragment里面的生命周期发生变化就会执行相应的方法。

第二步, 如果稍微动一下脑筋,应该能够猜到, 调用handleLifecycleEvent方法,最后肯定都是通过获取注解,反射调用相应的方法。


注册观察者的时候做了些什么操作

image.png

注册的Observer会包装成ObserverWithState并保存到一个map里面。

 static class ObserverWithState {
        State mState;
        LifecycleEventObserver mLifecycleObserver;

        ObserverWithState(LifecycleObserver observer, State initialState) {
            mLifecycleObserver = Lifecycling.lifecycleEventObserver(observer);
            mState = initialState;
        }

        void dispatchEvent(LifecycleOwner owner, Event event) {
            State newState = getStateAfter(event);
            mState = min(mState, newState);
            mLifecycleObserver.onStateChanged(owner, event);
            mState = newState;
        }
    }

接下来着重看一下是如何执行到了Observer里面的onStateChange方法

handleLifecycleEvent  ——>    moveToState ——>  sync ——> forwardPass

当生命周期变化后会执行这一系列的方法
最终会调用到
observer.dispatchEvent(lifecycleOwner, upEvent(observer.mState));
这个方法最终就会调用到observer.onStateChange方法

思考


现在官方的Lifecycle只能在Activity 和Fragment中使用, 如果想在RecycleView的Holder中也使用LifeCycle? 那应该如何去实现呢?

发散一下大家的思维

相关文章

网友评论

      本文标题:android Jetpack之LifeCycle的原理分析

      本文链接:https://www.haomeiwen.com/subject/obkfkktx.html