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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?