长期以来,android官方没有制定一个项目架构的规范, 慢慢地就有第三方的项目架构例如XUtils 等引入到android平台上, 类似的还有MVP、MVVM等。
作为开发者, 我们需要思考一个问题: android开发为什么需要架构?
在传统的开发模式下,Activity 任务太重了,要负责UI展示,又要负责逻辑处理,还要创建子线程处理网络回调、 异常处理等等, 各个部分根本没有模块化、独立出来,
结果:以后维护越来越困难,越来越庞大,也不便于测试。 我们知道项目一般不止一个人开发, 特别是在企业里更是不止一个人开发,
时间一长很难找到代码, 同时会出现改一处,动全身,产生新bug.
出现这种局面,原因就是: 没有任何架构上的划分。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2018年google 推出了一个全新的开发组件工具集Jetpack, 并将Architecture Components 作为Jetpack的一部分纳入其中。
1 Jetpack中的组件有一个特点, 大部分组件不依赖于任何Android系统版本, 这些组件通常是定义在 AndroidX库当中的。
下面看一张Jetpack架构图
图1 Jetpack 应用架构图
可以看到, Jetpack 由基础、 架构、行为、界面 4部分组成。
目前android官方 推荐的项目架构是MVVM, Jetpack中的许多架构组件 是为MVVM 架构 打造的。有哪些主要架构看一个图:
简要介绍一下各组件
1. ViewModel 的作用是帮助Activity分担一部分工作, 它是专门用于存放与界面相关的数据的。 也就是说它是为减少Activity 中的逻辑。
2. Lifecycles 用于在一个非Activity 类中去感知Activity 的生命周期。 同样也可以在非Fragment 类去感知Fragment的生命周期。
3. LiveData 是一种响应式编程组件, 它可以包含任何类型的数据,并在数据发生变化时通知观察者。
如果在ViewModel 内部开启了线程去执行一些耗时操作,那么在界面上,此时去获取最新的数据,得到的数据还是之前的数据。
解决方法是: 将界面上操作涉及的数据使用LiveData来包装,然后在Activity 去观察它,就可以主动将数据变化通知给Activity了。
4. Room 是android官方推出的一个ORM框架,用于数据库操作。 Room 主要由Entity(实体)、Dao 和 Database 3部分组成。
5. WorkManager 与Android的后台机制 相关, WorkManager很适合用于处理一些要求定时执行的任务,它可以根据系统的版本自动选择底层是使用AlarmManager 实现还是 JobScheduler 实现, 从而降低了我们的使用成本。
WorkManger 跟 Service 不同,也没有直接的关系。 它可以保证即使在应用退出甚至手机重启的情况下,之前注册的任务仍然将会得到执行。
它适合用于执行一些定期和服务器交互的任务,例如定时同步数据。
WorkManager 注册的周期性任务不能保证一定会准时执行, 这是系统为了减少电量消耗,可能会将触发时间临近的几个任务放在一起执行。