是时候更新手里的武器了—Jetpack架构组件简析

前言最近两年 , MVVM的呼声越来越高 , 说实话 , 在经历了MVP的臃肿 , MVP的繁琐 , 我有点怕了 。但是这次google官方带来的一系列为MVVM架构设计的武器—Jetpack , 真的让我惊喜到了 。
也许你还没有使用这个新的武器 , 那么我真的建议你去使用一下 , 感受下这个新武器的快准狠 , 感受下这个新架构的精妙解耦 。
介绍2018年谷歌I/O , Jetpack横空出世 , 官方介绍如下:

Jetpack 是一套库、工具和指南 , 可帮助开发者更轻松地编写优质应用 。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务 , 以便您将精力集中放在所需的代码上 。
一直以来 , Android开发都充斥了大量的不规范的操作和重复代码 , 比如生命周期的管理 , 开发过程的重复 , 项目架构的选择等等 。所以Google为了规范开发行为 , 就推出这套指南 , 旨在让开发者们能够更好 , 更快 , 更规范地开发出优质应用 。
当然 , 这两年的实践也确实证明了Jetpack做到了它介绍的那样 , 便捷 , 快速 , 优质 。所以我们作为开发者还是应该早点应用到这些工具 , 提高自己的开发效率 , 也规范我们自己的开发行为 。
今天给大家带来的是Jetpack中的架构组件 , 这个模块的组件可以说就是为MVVM框架服务的 , 每个库也都是可以单独使用的 。
Jetpack-架构组件先简单说下MVVM , Model—View—ViewModel 。
  • Model层主要指数据 , 比如服务器数据 , 本地数据库数据 , 所以网络操作和数据库读取就是这一层 , 只保存数据 。
  • View层主要指UI相关 , 比如xml布局文件 , Activity界面显示
  • ViewModel层是MVVM的核心 , 连接view和model , 需要将model的数据展示到view上 , 以及view上的操作数据反映转化到model层 , 所以就相当于一个双向绑定 。
所以就需要 , databinding进行数据的绑定 , 单向或者双向 。viewmodel进行数据管理 , 绑定view和数据 。lifecycle进行生命周期管理 。LiveData进行数据的及时反馈 。迫不及待了吧 , 跟随我一起看看每个库的神奇之处 。
数据绑定
数据绑定库是一种支持库 , 借助该库 , 您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源 。
主要指的就是数据绑定库DataBinding , 下面从六个方面具体介绍下
配置应用使用数据绑定:
android {...dataBinding {enabled = true}}1)布局和绑定表达式通过数据绑定 , 我们可以让xml布局文件中的view与数据对象进行绑定和赋值 , 并且可以借助表达式语言编写表达式来处理视图分派的事件 。举个:
//布局 activity_main.xml<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"><data><variable name="user" type="com.example.User"/></data><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{user.name}"/></layout>//实体类Userdata class User(val name: String)//Activity赋值override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)binding.user = User("Bob")}通过@{}符号 , 可以在布局中使用数据对象 , 并且可以通过DataBindingUtil获取赋值对象 。并且@{}里面的表达式语言支持多种运算符 , 包括算术运算符 , 逻辑运算符等等 。
2)可观察的数据对象可观察性是指一个对象将其数据变化告知其他对象的能力 。通过数据绑定库 , 您可以让对象、字段或集合变为可观察 。
比如上文刚说到的User类 , 我们将name属性改成可观察对象 , 
data class User(val name: ObservableField<String>)val userName = ObservableField<String>()userName.set("Bob")val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)binding.user = User(userName)


推荐阅读