Android开发不一样于传统的桌面程序开发,桌面程序通常都有惟一的快捷方式入口,而且常做为单进程存在;而一个典型的Android应用一般由多个应用组件构成,包括不一样数量的Activity、Fragment、Service、Content Provider、Broadcast Receiver等。html
此外,用户在移动设备上经常会在多个App之间切换。例如,若是用户想要在一个社交应用上分享一张图片,那么通常的流程是首先该社交应用可能会使用Intent的方式经过Android系统来启动一个拍照应用,此时用户虽然离开了社交App,但其体验是无缝衔接的。一样地,拍照应用也可能启动其余应用,如文件选择器或其余。最终用户返回社交应用而后分享图片。固然,用户操做可能在上述过程当中的任什么时候刻被电话打断,当通话结束再继续进行图片分享流程。android
在Android系统中相似的应用切换很是频繁,所以须要使得咱们的应用可以正确处理上述流程。并且移动设备的资源是有限的,因此在任什么时候候,操做系统都有可能杀死一些应用来为一些新的应用腾出资源。编程
综上,咱们的应用组件可能被无规则地启动,也可能随时被用户或系统销毁,其生命周期并不禁咱们控制,所以咱们不该该在应用组件中存储任何数据并且组件之间也不该该互相依赖。这时候,咱们就须要从新考虑如何设计Android应用的架构了。网络
在设计Android应用架构的时候,咱们须要考虑如下两个设计原则:架构
第一,职责分离。咱们不该该把任何跟UI处理或系统交互无关的代码写到Activity或Fragment中,而是尽量保持Activity和Fragment的简洁(职责单一化),这样能够避免许多生命周期相关的问题。由于咱们并不能控制这些类,因此咱们应该最小化对App组件的依赖从而提供稳定的用户体验。框架
第二,数据模型(Model)驱动UI,最好是可持久化的数据模型。持久化数据不只能够保证当系统为了释放资源而销毁掉App时用户不会丢失数据,并且当网络情况差或无网络时App依然能够工做。Model也能够当作一种处理应用数据的组件,它们独立于视图和其余App组件,所以Model不存在和生命周期相关的问题。ide
在MVP中,将逻辑转移到P层,这样更合理。由于UI 组件是链接用户和OS的那一层,并不彻底属于开发者自己,会受到系统的影响,好比配置的更改、内存不足重启等等,因此尽可能保证 UI 组件整洁,才会提高代码的可测试性和稳健性。post
不管是 MVC MVP MVVM 它们存在什么问题呢?测试
他们的模块通讯方式,始终是持有对象(或接口)。对于 Android 系统来讲,每个你在 Manifest 声明的四大组件都有可能会忽然死掉,这也形成了:ui
为了掩盖或解决以上种种问题,Android Architecture Components 架构就应运而生了,Android Architecture Components 架构包括了一系列组件,好比 LifeCycle、Room、LiveData、ViewModel、Paging 等等。
讲到 Android Architecture Components 不得不提 Android Jetpack,Jetpack就是Android官方提供的一个组件集合,它能够帮助咱们加快 Android 开发速度,消除模板代码。这个集合能够分为四大类:
(1) 基础组件:提供核心的系统功能、Kotlin扩展以及对Multidex和自动化测试的支持。
(2) 架构组件:帮助实现生命周期管理、数据持久化等工做。
(3) 行为组件:帮助开发者构建稳定、易于测试和维护的应用程序。
(4) UI组件:帮助开发者构建的应用程序拥有更好的用户体验。
Jetpack是以“未捆绑”的库形式提供的,这些类库不属于基础Android平台的一部分,所以咱们能够根据本身的需求使用和更新每个组件,独立于任何特定的Android版本提供功能,从而实现向后兼容。相关的组件库包括:Lifecycle、LiveData、ViewModel、Room。
1. Android Jetpack:https://developer.android.google.cn/jetpack/
2. Room:Android框架式编程之Room
3. ViewModel:https://www.jianshu.com/p/0987bd15b235
4. Lifecycle:https://www.jianshu.com/p/52b87ed17be0
5. LiveData:https://www.jianshu.com/p/95726843eb29
6. Android Architecture Components:https://www.jianshu.com/p/87a0332e5dec