首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Lifecycle-Aware组件优化项目

组件介绍

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181203B088GV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券