几十亿的设备都在用 Android 系统,从高端手机到飞机上的影音娱乐系统,应有尽有,不一而足。而 Android OS 则为这几十亿的设备保驾护航,高效管理资源,保障运行流畅,然而有时候却增加了开发卓越 App 的难度。为了简化开发流程,我们在 Google I/O 大会上发布了架构组件(Architecture Components)的预览版,为 App 开发构架提供指南,并为常见任务,如生命周期管理、数据持久性等提供了一系列库。有了这些基础组件的帮助,开发者能够使用更少的样板代码写出模块化 App,将精力用于创新而非重复体力劳动 —— 我们也会在今后继续完善这一基础架构。
今天我们很高兴地宣布 Room 和生命周期管理(Lifecycles)的架构组建库 1.0 稳定版正式发布,其 API 已经可以在生产环境的 App 和库中使用,并且我们强烈建议在 App 架构和本地储存方面需要帮助的开发者使用这些 API (只是推荐使用,并不硬性要求)。此外生命周期管理同时也已集成到支持库中(Support Library),因此开发者也可以在标准类别里,如 AppCompatActivity 中使用这些 API。
虽然我们今日才发布稳定版,其测试版组件早已被整合进达十亿量级下载的 App 中。架构组件帮助很多顶级开发团队,如 Zapppos,将更多的时间集中在更为关键的工作中。
在架构组件发布之前,我们有自己的 ViewModel 实现,通过加载器(Loader) 和依赖注入(Dependency Injection)保证即使配置更改后,ViewModel 依旧不变。我们最近转用了架构组件中的 ViewModel 实现,并完全摆脱了重复工作,我们发现可以将更多的时间用于设计、业务逻辑和测试,而不是浪费在样板代码或担心 Android 生命周期的问题上。
同时我们也开始借助 LiveData —— 一个可以感知 Activity 生命周期的数据容器 —— 用于获取和显示网络数据,而不用再担心网络调用的订阅管理。 —— David Henry,Zappos 的 Android 软件工程师
架构组件提供简单、灵活而且操作性高的方法,解决开发者遇到的常见问题,让他们可以专注于打造一流的用户体验。在其背后,我们通过 App 架构指南,将多个核心构建单元捆绑在一起。
Lifecycles
每个 Android 开发者都应该面对过生命周期问题,即操作系统启动、停止和销毁 Activity。这意味着开发者需要根据生命周期的不同阶段,有针对性地管理组件状态,比如用于更新用户界面的可观察对象。生命周期管理(Lifecycles)帮助开发者创建 “可感知生命周期的” 组件,让其自己管理自己的生命周期,从而减少内存泄露和崩溃的可能性。生命周期库是其他架构组件(如 LiveData)的基础。
了解更多 Lifecycles 相关内容:
https://developer.android.google.cn/topic/libraries/architecture/lifecycle.html
LiveData
LiveData 是一款基于观察者模式的可感知生命周期的核心组件。LiveData 为界面代码 (Observer)的监视对象 (Observable),当 LiveData 所持有的数据改变时,它会通知相应的界面代码进行更新。同时,LiveData 持有界面代码 Lifecycle 的引用,这意味着它会在界面代码(LifecycleOwner)的生命周期处于 started 或 resumed 时作出相应更新,而在 LifecycleOwner 被销毁时停止更新。通过 LiveData,开发者可以方便地构建安全性更高、性能更好的高响应度用户界面。
了解更多 LiveData 相关内容:
https://developer.android.google.cn/topic/libraries/architecture/livedata.html
ViewModel
ViewModel 将视图的数据和逻辑从具有生命周期特性的实体(如 Activity 和 Fragment)中剥离开来。直到关联的 Activity 或 Fragment 完全销毁时,ViewModel 才会随之消失,也就是说,即使在旋转屏幕导致 Fragment 被重新创建等事件中,视图数据依旧会被保留。ViewModels 不仅消除了常见的生命周期问题,而且可以帮助构建更为模块化、更方便测试的用户界面。
了解更多 ViewModel 相关内容:
https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html
Room
几乎所有 App 都需要在本地储存数据。自从最早版本开始,Android 就提供了 SQLite,但是直接使用 SQLite是件苦差事。因此,我们推出了 Room,一款简单好用的对象映射层。它和 SQLite 有一样强大的功能,但是节省了很多重复编码的麻烦事儿。它的一些功能,如编译时的数据查询验证、内置迁移支持等,让开发者能够更简单地构建健壮的持久层。而且 Room 可以和 LiveData 集成在一起,提供可观测数据库并感知生命周期的对象。Room 集简洁、强大和可靠性为一身,在管理本地储存上表现卓越,我们强烈推荐各位开发者试用一下。
了解更多 Room 相关内容:
https://developer.android.google.cn/topic/libraries/architecture/room.html
App 架构指南以及更多讯息
最后还有一个要点得说明一下:我们撰写了 “App 架构指南”,涵盖数条适用于所有开发者的关键原则以及针对架构组件的具体指导。因为有开发者向我们反映,清晰、连贯的指南文档很重要,因此我们现在更新了开发者文档,在适当之处指明架构组件。此外,我们还在官网发布了一系列相关视频、codelab 和 App 样本,并且会陆续补充。
App 架构指南:
https://developer.android.google.cn/topic/libraries/architecture/guide.html
Android 架构组件官网:
https://developer.android.google.cn/topic/libraries/architecture/index.html
继续注意此领域
尽管首套架构组件已经发布稳定版,我们深知路漫漫其修远兮。在过去的几个月中,我们正对各位提出的反馈,认真作出改进。在最近通过 Alpha 测试版渠道,我们还发布了新组件 —— PagedList,解决大家用 RecyclerView 处理大数据集的困难。旅途才刚刚开始,我们还有更多重要组件还在开发阶段,有望在未来的几个月和大家见面。
了解更多 PagedList 内容:
https://developer.android.google.cn/topic/libraries/architecture/paging.html
提交反馈:
https://developer.android.google.cn/topic/libraries/architecture/feedback.html
我们希望架构组件能够解放开发者,让各位能够专注于创新,打造移动端独一无二的新体验。我们很高兴最终发布可用于生产环境的稳定版本。在此,我们特别要感谢开发者一直以来提供的宝贵建议,希望各位在下方讨论区踊跃留言。各位一直翘首以盼稳定版的朋友们,何不今天就开始下载使用?