Android Jetpack组件一览

·  阅读 1312
Android Jetpack组件一览

官网简介

Jetpack 是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码,让开发者精力集中编写重要的代码。

Jetpack 是 Google 为解决 Android 开发碎片化,打造成熟健康生态圈提出的战略规划,是 Google 对 Android 未来提出的发展方向,同时它也是众多优秀 Android 组件的集合。

JetPack的构成图

image.png

Jetpack主要特性:

1.加速开发

组件可单独使用,也可以协同工作,当使用kotlin语言特性时,可以提高效率。

2.消除样板代码

Android Jetpack可管理繁琐的Activity(如后台任务、导航和生命周期管理)。

3.构建高质量的强大应用

Android Jetpack组件围绕现代化设计实践构建而成,具有向后兼容性,可以减少崩溃和内存泄漏。

Jetpack常见组件介绍

一、Lifecycle

lifecycle通过观察者模式监听生命周期

被观察者(lifecycleOwner):activity,Fragment声明周期变化getLifecycle().addObversever(自己的类)绑定观察者—>通知 dispatch(Event)—>观察者(lifecycleObserver):用户类,FrameWork层类,mObserverMap:存放了所有观察者—>反射拿到观察者的class对象—>mInfo:存放了所有带注解的方法@OnLifecycleEvent(Lifecycle.Event.ON_CREATE))—> mMethod.invoke(target,source)—>调用相应api,需要监听哪个声明周期则重写哪个方法就好

mState:从左往右,从右往左返回状态值 监听生命周期需要实现lifecycleObserver接口

二、liveData

liveData是一个数据持有类

  • 能够感知组件的生命周期,确保仅更新活跃组件
  • 不会因Activity停止而导致崩溃,如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件
  • 持有的数据可被观察者观察,在底层数据更改时通知视图
  • 一对多观察者:观察者会绑定lifecycle对象,在生命周期结束时会自我清理(不会发生内存泄露)
  • 共享资源:可以使用单例模式扩展 LiveData 对象以封装系统服务,以便在应用中共享它们。

liveData使用:

  • MutableLiveData:LiveData(抽象类)的子类
  • liveData.postValue():可在任意线程下执行(切换线程操作)
  • liveData.setValue():只能在主线程中执行
  • liveData.observe():注册观察者
  • observe()源码:注册观察者保存在mObserves(map)中
  • 感知生命周期:owner.getLifecycle().addObserver(wapper),改变时调用onstatechanged()

观察者有两种情况会被回调:

1、postValue时会遍历观察者然后回调

2、当组件生命周期发生变化或者第一次注册观察者时回调

粘性事件:

这里得满足两个条件会触发粘性事件 1.数据发送早于注册监听 2.监听者的owner生命周期进入活跃状态

三、ViewModel和DataBinding

  • viewModel:注重以生命周期的方式存储和管理界面相关数据,不受activity生命周期影响
  • 数据持久化:生命周期不受限制
  • 异步回调问题不会造成内存泄露
  • 隔离model层和view层:解耦
  • Fragment间共享数据
  • DataBinding:实现双向绑定,数据和UI同步

作用:当数据源发生改变时,及时更新给UI(p层做的事情交给系统源码去做)

四、Navigation和Fragment

Navigation:导航(回退栈)

三大件:

Navigation Graph:导航图,包含了所有导航相关信息的XML资源。一般防止在res/navigation目录下

NavHost:容器,用来显示Fragment的,即Activity中的fragment,要求实现NavHost

NavController:在NavHost中管理应用导航的对象

一句话就是,通过NavController,获取当行图中的特定路径以及目标,导航到特定的目标放到NavHost中

Navigation是用来管理Fragment的切换,并且可以通过可视化的方式,看见APP的交互流程。

优势:

1、可视化的页面导航图,可以编辑各个组件之间的跳转关系 2、优雅的支持Fragment之间的转场动画 3、通过第三方的插件(SafeArgs(Gradle插件))支持Fragment之间类型安全的参数传递 4、通过NavigationUI类,对菜单,底部导航,抽屉菜单导航进行方便统一的管理 5、支持通过deeplink直接定位到Fragment

五、Room数据库

轻量级orm数据库(关系映射型),本质上sqlite抽象层,类似于Retrofit库,Room在开发阶段通过注解标记相关功能,编译时自动生成impl实现类

数据库框架的两种实现思路:

关系映射型(orm):根据类对象通过反射的手段获取到类名以及成员变量名作为表名和字段名

缺点:无法确定类对象中有哪些成员不需要创建表字段

注解+反射:每个业务模块完全独立,不浪费资源,要自定义注解和处理注解

Room三大件:

1、Entity:实体类,对应的是数据库的一张表结构。需要使用注解 @Entity 标记。 2、Dao:包含访问一系列访问数据库的方法。需要使用注解 @Dao 标记。 3、Database:数据库持有者,作为与应用持久化相关数据的底层连接的主要接入点。需要使用注解 @Database 标记。 使用@Database注解需满足以下条件: 1)定义的类必须是一个继承于RoomDatabase的抽象类。 2)在注解中需要定义与数据库相关联的实体类列表。 3)包含一个没有参数的抽象方法并且返回一个带有注解的 @Dao。

六、workManager

workManager:可延迟运行,并在应用退出或重启时能可靠运行任务

应用场景:埋点上传,非即时性上传与下载,同步数据和处理数据

三大件:

1、Worker:我们要执行的具体任务。需要继承Worker,重写doWork方法,然后在里面写具体的逻辑。 2、WorkRequest:上面的Worker是定义了我们要在后台的任务,而这个类是对Worker的包装。 下面两个都是继承了WorkRequest: OneTimeWorkRequest: 只执行一次的任务 PeriodicWorkRequest: 重复执行的任务(重复间隔大于15分钟) 3、WorkManager:是对WorkRequest的管理类。

七、pager

pager:分页加载

三大件:

  • DataSource:数据源,获取数据
  • pagedList:承载数据,可理解为一页数据的集合
  • pagedListAdapter:对RecyclerViewAdapter的一个扩展

总结

Jetpack的出现代表谷歌标准化开发模式的推进,代表了Android开发的未来大致方向,意味着Android发展已经从碎片化转向统一化。现在大多公司的android岗位都开始要求或者以会kotlin,jetpack为加分项以后jetpack开发也将成为大趋势。

jetpack单个库的学习比较简单,但在正规的项目中都是要联在一起使用的。而且由于使用jetpack的原因,项目都比较精简,如果运用不熟练,改bug或者开发新功能就会很难下手。大家学习jetpack的时候要把常用的库理解清楚,这样就会在jetpck项目框架的理解和功能的开发方面有更好的方案。

收藏成功!
已添加到「」, 点击更改