JetPack初探之LifeCycle

lifecycle理解:

lifecycle是jetpack中一个持有组件生命周期状态信息的类,它通过Event、State两个主要的枚举,语序其他对象观察此状态

 public enum Event {
        ON_CREATE,//用于 LifecycleOwner的onCreate事件的常量。
        ON_START,//用于 LifecycleOwner的onStart事件的常量。
        ON_RESUME,//用于 LifecycleOwner的onResume事件的常量。
        ON_PAUSE,//用于 LifecycleOwner的onPause事件的常量。
        ON_STOP,//用于 LifecycleOwner的onStop事件的常量。
        ON_DESTROY,//用于 LifecycleOwner的onDestroy事件的常量。
        ON_ANY//常量,可用于匹配所有事件
    }
public enum State {
        DESTROYED,
        INITIALIZED,
        CREATED,
        STARTED,
        RESUMED;
        public boolean isAtLeast(@NonNull State state) {
            return compareTo(state) >= 0;
        }

如何使用

  • Event枚举是被提供出来的,当观察者MyLifeCycleObserver——需要继承LifeCycleObserver(),使用@OnLifecycleEvent(LifeCycle.Event.ON_XXXXX)注解,标注当获取被观察者的生命周期状态时执行哪一个方法
    而在被观察的类中通过使用getLifeCycle().addObserver(myLifecycleObserver),关联观察者与被观察者,这样就可以在观察者中实时获取到被观察者的生命周期状态

使用过程中的疑问

问题一:State,并没有在被观察者中使用,那它有什么作用?
解答一:在被观察类执行到对应的生命周期时会调用lifeCycleRegistry.makeState(LifeCycle.State.XXXX),然后观察者会在对应的生命周期Event注解中接收到消息。

问题二: 为什么没有看见State在代码中使用?
解答二:这就需要追踪源码了,点击AppCompatActivity()->FragmentActivity()->ComponentActivity(),在ComponentActivity()的onSaveInstanceState方法中看到有一个注册了Create返回事件,它会返回onCreate方法的生命周期监听

问题三:但这只是在onSaveInstanceState注册的Create,它明明没有在onCreate()、onStart()、onDestroy()等生命周期中注册,那为什它还能用?
解答三:这个时候,你再次往下追到Activity()并没有找到与之相关联的,这时,你注意看,在ComponentActivity()的onCreate()中有一段代码:ReportFragment.injectIfNeededIn(this);进入ReportFragment,你看到有Event的属性在这被使用了,但还是没有State的使用位置。

  • 点进dispatchCreate()、dispatchStart()、dispatchResume(),通过其中的监听往上追踪源码会看到一句代码:mRegistry.handleLifecycleEvent(Lifecycle.Event.ON_XXXX)。
  • 你在ReportFragment中dispatch()中也会看到一句((LifecycleRegistry) lifecycle).handleLifecycleEvent(event),点进去一看他们都是同一个方法,再看官方解释:Sets the current state and notifies the observers(设置当前状态并通知观察者)。
    这个时候我们基本可以知道State的使用位置及方法了:他是通过传递过来的Event返回对应的State
  • 在handleLifecycleEvent()方法的getStateAfter(event);就可以看到Event与State的关系
   static State getStateAfter(Event event) {
        switch (event) {
            case ON_CREATE:
            case ON_STOP:
                return CREATED;
            case ON_START:
            case ON_PAUSE:
                return STARTED;
            case ON_RESUME:
                return RESUMED;
            case ON_DESTROY:
                return DESTROYED;
            case ON_ANY:
                break;
        }
        throw new IllegalArgumentException("Unexpected event value " + event);
    }

Event与State对应关系:
ON_CREATE/ON_STOP->CREATED
ON_START/ONPAUSE->STARTED
ON_RESUME->RESUMED
ON_DESTORY->DESTORYED
ON_ANY->constant that can be used to match all events

总结

好勒,这些就是我对于LifeCycle生命周期状态获取的一些理解,其中看了这位大佬的文章,并自己通过查看源码结合起来的理解。当然,理解的很浅也没有这位大佬那么深入,如果有需要JetPack更加深入的知识可以去这位大佬那里看一下

发布了19 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xyzahaha/article/details/103379064