Android-JetPack初次尝试
-
简介
Jetpack 是一个丰富的组件库,它的组件库按类别分为 4 类,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。每个组件都给用户提供了一个标准,能够帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者能够集中精力编写重要的业务代码。
-
优点
1.JetPack采用最新的设计方法构建,具有向后兼容性,可以减少应用的崩溃和内存泄露;
2.可以管理各种繁琐的Activity(比如后台任务、导航和生命周期管理),以便您可以专注于打造出色的应用;
3.JetPack的各种库可在各种Android版本和设备中以一致的方式运作,帮助你降低项目的复杂性。在很大程度上提升了开发效率。
-
使用
下面着重介绍一下几种架构:
1.LifeCycle:组件内部感知自己的生命周期
2.Navigation:管理Fragment
3.ViewModel:视图与数据之间的桥梁
4.LiveData:实时更新数据
5.Room:数据库
6.WorkManager:智能后台任务
7.DataBinding:xml中数据绑定
8.Paging:分页加载
-
简单入坑
传统的MVC架构
传统的MVC,一般是一个View对应一个Activity,这样一来model数据逻辑和Controller控制器代码都在Activity里。导致Activity代码过多,缺点就很明显不利于维护而且耦合度大。
ViewModel
ViewModel是单独管理数据,将View里的数据独立出来,使控制器更加简单。负责管理数据,防止数据丢失(比如切换系统语言,旋转屏幕)。还可以和LiveData配合,监听数据来改变UI 的数据。这时候ViewModel只是将数据独立出来,刷新UI还是在控制器的references里进行,下面LiveData的出现就是解决这一问题的。
https://www.jianshu.com/p/50ab45e957d3
LiveData
观察者模式自动刷新数据,ViewModel采用LiveData来管理数据。ViewModel结合LiveData一起就可以直接观察数据的变化,如果数据变化就刷新UI。这样就架空了控制器和UI之间的联系,将数据刷新的功能直接赋能给ViewModel。
https://www.jianshu.com/p/1171948c1b3b
DataBinding
当然在数据绑定中,我们发现有控制器里有很多重复的findViewById。这里JetPack也帮我们解决了这个问题,DataBinding的诞生就是实现UI界面直接绑定数据,然后在ViewModel中实现数据的逻辑,控制器进行控制。
https://www.jianshu.com/p/b1b0f3037202
Navigation
Navigation的作用想当如路由route,我们可以在主Activity的UI布局中添加fragment的子UI布局,然后子fragment之间的跳转和数据传递都可以利用Navigation完成。Navigation的使用是创建一个navigation布局的xml实现可拖动效果,然后设置对应的action等等属性。(目前没用到,感觉稍微有点复杂)
-
个人小结
因为我自己是从传统架构MVC一直走到MVVM的,再到现在的JetPack。JetPack肯定能规范开发,并且避免一些不必要的问题,比如生命周期的控制、减少应用崩溃和内存泄露。但是万事都有利弊,JetPack把代码脱的一件都不剩,这样不利于阅读代码和理清业务逻辑。所以对于Android初学者,不建议一上来就JetPack,万丈高楼平地起。我们知道了传统架构存在的问题,有了一定的经验积累自然就能很快的接收和理解JetPack的设计思想。