Android开发中AAC框架基础概念整理

历时1个多月的重构项目终于结束了,在重构过程中引入了AAC框架,算是对于这个新框架的初探与尝试。看了看自己之前的那篇文章,感觉当时的思考和理解还不够完善,今天打算系统地学习一下AAC。首先,了解一下什么是AAC。

一、什么是AAC

Android Architecture Components,实际上是android官方提供的一系列组件,在官网中可以看到,已经出了好多。现在主要应用于处理UI周期与数据的持久化。官网截图如下

而AAC对于我来说,目前应用最多的是LiveData和ViewModel。有了这两个组件,我们可以轻松地实现MVVM架构,将项目的代码结构更加地解耦。在使用LiveData的时候,还不得不用到LifeCyclerOwner。今天就来详解一下上述提及的这几个概念。

二、关于LifeCycle

看了半天官网的文章才找到,LifeCycle的解释:Lifecycle is a class that holds the information about the lifecycle state of a component (like an activity or a fragment) and allows other objects to observe this state.

LifeCycle State实际上就是生命周期,传统的代码模式中,为了让生命周期感知组件能够根据activity或fragment的生命周期的变化做出相应的反应,通常要在各个activity或fragment的生命周期方法中去实现你要实现的反应代码。这样的做法会让代码越来越臃肿。但是在AAC框架中,通过LifeCycleObserver和LifeCycleOwner等组件的合作,可以不用在activity或fragment的生命周期中实现代码,可以把功能放到各组件自己的代码中去实现。

三、LifecycleOwner

LifecycleOwner is a single method interface that denotes that the class has a Lifecycle. 官网给出了上述解释。我们常用的实现了LifecycleOwner的组件就是activirty和fragment。而官网上还有一句话是Components that implement LifecycleObserver work seamlessly with components that implement LifecycleOwnerbecause an owner can provide a lifecycle, which an observer can register to watch. 这句话就解释的比较清楚了,实现了LifecycleOwner的组件和实现了LifecycleObserver的组件可以无缝衔接版的组合工作,通过注册的方式观察LifecycleOwner变化即可。

这种方式带来的好处显而易见,就是上面所说的,我们可以把生命周期变化所带来的响应操作,都放在各自的组件中去实现。

扫描二维码关注公众号,回复: 2820274 查看本文章

四、LifecycleObserver

Marks a class as a LifecycleObserver. It does not have any methods, instead, relies on OnLifecycleEvent annotated methods.

LifecycleObserver是一个接口,里面没有任何方法,主要通过声明方法同时加上注解来实现各生命周期变化时带来的相应操作。

五、LiveData

LiveData是一种可观察的数据封装类,它区别于以往的封装类的地方在于它是生命周期感知的。LiveData可以被当做是观察者的代表,它会通知所有活动状态中的观察者们,已经停止活动的观察者,LiveData则不会通知变化事件。

LiveData可以与LifecycleOwner配对绑定使用,这种关系允许当Lifecycle持有者生命结束时移除观察者的订阅。这种方式可以不用再考虑不主动移除观察者而带来的内存泄漏问题。

六、LiveData的使用

1、在ViewModel中实例化你的LiveData数据

2、创建一个Observer实现它的onChanged方法来决定当观察的LiveData数据发生改变时要做出什么后续操作处理。创建和绑定Observer的时机通常在UI controller中,比如activity或者fragment,因为绑定时候的参数要求传入一个LifecycleOwner。

3、通常在一个组件的onCreate时机来绑定LiveData。因为系统可能会多次调用onResume方法,而且onCreate方法说明页面即将被展示进入活动状态。

4、通常情况下,ViewModel在内部使用MutableLiveData,它是一种提供setValue和postValue两种方法的LiveData。而ViewModel只会把不会改变的LiveData暴露给观察者们。

5、setValue只能用在主线程,而如果是工作线程中调用,要使用postValue来代替。

七、ViewModel

ViewModel被设计用于存储和管理UI变化相关的数据,它允许屏幕横竖屏切换后数据仍然得到保存。

注意,ViewModel不应该持有任何View,生命周期相关的类,或者可能持有包含生命周期相关功能的类。如不能持有activity,fragment或者context等。

ViewModel的生命周期比较长,它的范围涵盖了activity横竖屏切换操作前后的所有生命周期。下面是官网给出来的图。

ViewModel还可以用于给同一个Activity里的多个fragment之间实现数据共享功能。

ViewModel和Room以及LiveData共同使用可以取代loader的作用。当数据库的数据发生变化时,Room会通知LiveData,从而刷新UI。

猜你喜欢

转载自blog.csdn.net/Kongou/article/details/81533593