组件介绍
Android Architecture Components 是一组库,可帮助您设计健壮、可测试和可维护的应用程序。包含以下几个组件模块:
lifecycle 处理生命周期,创建一个自动响应生命周期事件的用户界面
LiveData 构建底层数据库更改时通知试图的数据对象(数据驱动界面)
ViewModel 存储未在应用旋转中销毁的UI相关数据
Room 使用应用内对象和编译时检查来访问您的应用的SQLite数据库
Paging 逐步从数据源加载所需的信息
整体结构如下:
ViewModel负责View层和Repository层的数据管理;
LiveData是一个可以保存数据和观察数据变化的组件;
Room通过注解来控制实体和操作数据库
Paging是一个处理数据分页的组件
让普通类感知生命周期
Lifecycle 介绍
LifeCycle的两个角色
LifeCycleOwner 生命周期拥有者,即Activity与Fragment(也可自定义,但局限性大)
LifeCycleObserver 生命周期观察者,可以是任何类,常见的有mvp的p,自定义View等
如何使用LifeCycleOwner
AppCompatActivity与V4中的Fragment都已默认实现了LifeCyclerOwner接口,所以可以直接使用。LifeCyclerOwner接口很简单,如下:
如何使用LifeCycleObserver
生命周期观察者需要实现LifeCycleObserver接口,这个接口没有任何方法。对于日常使用我们只需继承该接口:
这样一个具备感知view层生命周期的类创建完成了,这里我们只需使用如下类似注解就可以监听到view的相关生命周期方法:
然后,需要让View和这个组件进行关联:
使用ViewMode管理数据
ViewModel是以关联生命周期的方式来存储和管理UI相关的数据的类,即使configuration发生改变(比如旋转屏幕),数据仍然可以存在不会销毁。
引入ViewModel的原因有以下几点:
Activity或Fragment这类应用组件都有自己的生命周期,他们的生命周期都是被Framework所管理。Framework可能会根据用户的一些操作以及设备的状态对Activity或Fragment进行销毁和重建。作为开发者,这些行为我们是无法干预的。伴随着Activity或Fragment的销毁和重建,它们当中的数据也会随着一起销毁和重建。对于一些简单的数据,Activity可以使用onSaveInstanceState()方法,并从onCreate的bundle中重新获取,但这一方法仅仅适合一些简单的UI状态,对于列表型这种庞大的数据类型并不适合
Activity或Fragment经常会做一些异步的耗时操作,随之就需要管理这些异步操作得到的数据,并在destroyed的时候清理它们,从而避免内存溢出这类问题的发生。但是这样的处理会随着项目扩大而变得十分复杂
Activity或Fragment本身需要处理很多用户的输入事件并和操作系统打交道,当它们还要花时间管理那些数据资源时,它们所在的类就会变得异常庞大,造就出所谓的god activities和god fragments,这样很尴尬
所以引入ViewModel之后,数据就可以从UI中分离出来,让每个模块的职责更加清晰合理。并且当Activity或Fragment重建的时候,ViewModel会自动保留之前的数据并给新的Activity或Fragment使用。
ViewModel生命周期
LiveData
LiveData 是一个可以保存数据和观察数据变化的组件。一句话总结:具有生命周期感知能力的弱化版(只是一个数据类型容器)Observable(RxJava)
Google帮我们实现了几种LiveData:
MutableLiveData暴露公用的setValue(T)和postValue(T)方法
ComputableLiveData可以根据需要对数据进行计算
MediatorLiveData可以用来正确的处理其他多个LiveData的事件变化,并处理这些事件。
LiveData的优势:
确保数据源跟UI展示一致——当数据源变化时,LiveData会通知观察者更新UI,前提是组件在激活状态下。
不会造成内存泄露——由于跟建立关系,从而可以获取生命周期状态,当组件生命周期状态为时,会移除观察者。
当组件处于非激活状态时,不会收到数据更新回调。
无需手动处理生命周期——UI组件只需要观察对应的数据,LiveData根据其生命周期自动处理。
总是最新的数据——当Activity从后台切到前台时,总会收到最新的数据。
适配设备配置变化——如屏幕旋转,组件销毁重建后,立即收到上次的数据。
资源共享——Activity和Fragment之间数据共享。
ViewModel配合LiveData使用姿势很简单:
现在 activity 可以像下面这样访问列表:
使用LifeCycle组件优化项目
1、不需要再去写那些类似调用并且会导致 onCreate() 和 onDestroy() 臃肿的方法。例如:那些需要在 onCreate 方法中初始化,在 onStop 进行一些处理,onDestoty 进行释放的操作。(MVP 中的 Presenter,MediaPlayer等)。
2、在高精度和低精度地理位置之间的切换.使用生命周期感知型的组件能够使用高精度获取地理位置在你的APP可见时候,当你的APP切换到后台的时候使用低精度更新.
3、启动和关闭视频缓冲.使用生命周期感知型组件来打开视频缓冲.你也可以在在app关闭的时候关闭视频缓冲.
4、启动和关闭网络连接.使用生命周期感知型组件能够允许app在前台时候更新网络数据,在app在后台时候自动暂停.
5、暂停和重启动画
最后附上最新依赖路径(Pre-AndroidX ):
最新AndroidX依赖请查阅Google官方文档:
https://developer.android.com/topic/libraries/architecture/adding-components#lifecycle
领取专属 10元无门槛券
私享最新 技术干货