您当前的位置: 首页 > 
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

jetpack源码解析--liveData、LifeCycle、viewModel

沙漠一只雕得儿得儿 发布时间:2021-05-07 15:55:21 ,浏览量:0

1.LifeCycle原理

Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理_薛瑄的博客-CSDN博客

Android Jetpack架构组件(三)带你了解Lifecycle(原理篇) | BATcoder - 刘望舒

Lifecycle的生命周期状态事件和状态

Lifecycle是一个抽象类,其内部包括了添加和移除观察者的方法,还包括了此前说到的Event和State枚举。Lifecycle使用两个枚举来跟踪其关联组件的生命周期状态,这两个枚举分别是Event和State。 State指的是Lifecycle的生命周期所处的状态。 Event代表Lifecycle生命周期对应的事件,这些事件会映射到Activity和Fragment中的回调事件中。

Lifecycle如何观察Activity和Fragment的生命周期

Activity和Fragment已经默认实现了LifecycleOwner接口,LifecycleOwner可以理解为被观察者

ComponentActivity内创建了LifecycleRegistry,LifecycleRegistry是Lifecycle的实现类,并注入到了ReportFragment。ReportFragment中会调用dispatch方法,对生命周期event事件进行分发。

到了LifecycleRegistry.handleLifecycleEvent进行处理。

ComponentActivity中-->onCreate-->ReportFragment.injectIfNeededIn(this);-->dispatchCreate/dispatchStart/dispatchResume-->dispatch-->LifecycleRegistry.handleLifecycleEvent-->moveToState-->sync-->backwardPass/forwardPass-->observer.dispatchEvent-->mLifecycleObserver.onStateChanged

在activity中,getLifecycle().addObserver(LifecycleObserver)将观察者和被观察者联系在一起 Lifecycle的实现类LifecycleRegistry中handleLifecycleEvent处理页面生命周期的走向,通过event的事件,驱动state状态的改变observer.dispatchEvent(lifecycleOwner, event);-->mLifecycleObserver.onStateChanged(owner, event);

onStateChanged-->ReflectiveGenericLifecycleObserver-->invokeCallbacks-->ClassesInfoCache(反射优化) 在createInfo中获取方法上的注解OnLifecycleEvent通过反射调用invokeCallback

Android Jetpack架构组件(三)带你了解Lifecycle(原理篇) | BATcoder - 刘望舒 实现LifecycleObserver接口的类中,注解修饰的方法和事件会被保存起来,通过反射对事件的对应方法进行调用.

2.viewmodel原理

Android Jetpack架构组件——一文带你了解ViewModel的使用及原理 - 掘金销毁: 在ComponentActivity中调用了OnDestory并且isChangingConfigurations不成立的时候,会去调用ViewModelStore的clear方法

创建: 先从ViewModelStore获取ViewModel实例。如果获取到了就直接返回。如果未获取到就直接通过工厂类创建一个,然后放入mViewModelStore中去。所以我们知道了,即使Activity重新创建了,因为ViewModel没有销毁,所以之前存储在ViewModel的数据源还在。这就合理的解释了,为什么ViewModel可以解决屏幕旋转后页面数据存储的问题。

3、liveData原理:

数据变化发送端(viewmodel内含livedata,postValue、setValue):livedata需要配合viewmodel使用,其中viewmodel是数据源的提供者(网络或Room数据库或某个任务提供的数据源),这个数据使用MutableLiveData装饰,通过postValue、setValue通知观察者,更新数据。数据监听端(observe):通过LiveData.observe(this,newObserver)实现对ViewModel中livedata数据变化的观察(回调)调用Observer的onChanged方法,获取到数据后再做界面的更新

源码解析:

Android Jetpack架构组件——LiveData原理篇 - 掘金

1、observe观察生命周期变化:

    @MainThread
    public void observe(@NonNull LifecycleOwner owner, @NonNull Observer            
关注
打赏
1657159701
查看更多评论
0.1905s