android Jetpack之LifeCycle的原理分析
2020-07-18 本文已影响0人
android源码探索
我自己开发的一款填色小游戏, 运用到了很多android技术,
欢迎大家到应用市场评论下载安琪花园
介绍Lifecycle之前,首先要明白Lifecycle的用途
监听Activity 和 fragment生命周期的变化
关于LifeCycle有几个重要的类, 它们是如何串联起来实现的哟
- LifecycleObserver
- LifeCycleOwner
- Lifecycle
- 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? 那应该如何去实现呢?
发散一下大家的思维