官网简介

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

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

JetPack的构成图

Android Jetpack组件一览

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项目结构的了解和功用的开发方面有更好的计划。