Jetpack全家桶(一)之简介
Android Jetpack之简介
- 为何使用 Android Jetpack?
- Jetpack分类
- Architecture(架构组件)
- 使用Jetpack
- Databinding
- Lifecycles+ViewModel+LiveData
- Kotlin
- Java
- Navigation
- Paging
- Room
- 配置编译器选项
- WorkManager
Jetpack 是一个由多个库组成的套件(并不是一个单一的组件库)
为何使用 Android Jetpack?
- 遵循最佳做法
Android Jetpack组件采用最新的设计方法构建,具有向后兼容性,可以减少崩溃和内存泄漏 - 消除样板代码
Android Jetpack可以管理各种繁琐的活动(如后台任务、导航和生命周期管理),以便您可以专注于打造特色的应用。 - 减少不一致
这些库可以在各种Android版本和设备中以一致的方式运作,助您降低复杂性。
Jetpack分类
从上图我们可以看出,JetPack组件库主要分为四个部分,分别是架构(Architecture)、界面(UI)、行为(behavior)和基础(foundation)。每个组件都可以单独使用,也可以配合在一起使用。其中用的比较多的是DataBinding、LiveData、Paging、Room、ViewModel、Lifecycles,也是接下来文章重点讲解的对象。
- 架构组件:提供易用框架,应用稳健、可测试、易维护。
DataBinding、ViewModel、LiveData、Lifecycle…… - 基础组件:提供兼容性、测试、安全、Kotlin 语言支持等。
Android KTX、Test…… - 行为组件:提供Android服务,通知、权限、分享等。
Permissions、Notifications、CameraX…… - 界面组件:提供页面、布局、动画等。
Fragment、Emoji、Palette……
上图盗用网络图片,根据官网上的介绍,目前 Jetpack 一共有 85 个组件库,有些看着很熟悉,比如:viewPager、fragment、recyclerview 等等,但有些好像根本就没有见过,也没有用过。
Architecture(架构组件)
Data Binding(数据绑定): 数据绑定库是一种支持库,借助该库,可以使用声明式将布局中的界面组件绑定到应用中的数据源。
Lifecycles: 方便管理 Activity 和 Fragment 生命周期,帮助开发者书写更轻量、易于维护的代码。
LiveData:是一个可观察的数据持有者类。与常规observable不同,LiveData是有生命周期感知的。
Navigation:处理应用内导航所需的一切。
Paging:帮助开发者一次加载和显示小块数据。按需加载部分数据可减少网络带宽和系统资源的使用。
Room:Room持久性库在SQLite上提供了一个抽象层,帮助开发者更友好、流畅的访问SQLite数据库。
ViewModel:以生命周期感知的方式存储和管理与UI相关的数据。
WorkManager:即使应用程序退出或设备重新启动,也可以轻松地调度预期将要运行的可延迟异步任务。
使用Jetpack
所有 Jetpack 组件都可在 Google Maven 代码库中找到。
点击查看jetpack库最新版本
打开你的项目的 build.gradle 文件并添加 google() 代码库,如下所示
allprojects {repositories {google()jcenter()}
}
然后,您可以在APP目录下面的build.gradle添加 Jetpack 组件,如下所示:
Databinding
数据绑定库与 Android Gradle 插件捆绑在一起。您无需声明对此库的依赖项,但必须启用它。
如需启用数据绑定,请在模块的 build.gradle 文件中将 dataBinding 构建选项设置为 true,如下所示:
android {...buildFeatures {dataBinding true}
}
注意:即使模块不直接使用数据绑定,也必须为依赖于使用数据绑定的库的所有模块启用数据绑定。
Lifecycles+ViewModel+LiveData
lifecycle-extensions 中的 API 已弃用。您可以为特定 Lifecycle 工件添加所需的依赖项。
Kotlin
dependencies {val lifecycle_version = "2.4.0-alpha02"val arch_version = "2.1.0"// ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version")// LiveDataimplementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version")// Lifecycles only (without ViewModel or LiveData)implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version")// Saved state module for ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")// Annotation processorkapt("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")// alternately - if using Java8, use the following instead of lifecycle-compilerimplementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")// optional - helpers for implementing LifecycleOwner in a Serviceimplementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")// optional - ProcessLifecycleOwner provides a lifecycle for the whole application processimplementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")// optional - ReactiveStreams support for LiveDataimplementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version")// optional - Test helpers for LiveDatatestImplementation("androidx.arch.core:core-testing:$arch_version")}
Java
dependencies {val lifecycle_version = "2.4.0-alpha02"val arch_version = "2.1.0"// ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version")// LiveDataimplementation("androidx.lifecycle:lifecycle-livedata:$lifecycle_version")// Lifecycles only (without ViewModel or LiveData)implementation("androidx.lifecycle:lifecycle-runtime:$lifecycle_version")// Saved state module for ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version")// Annotation processorannotationProcessor("androidx.lifecycle:lifecycle-compiler:$lifecycle_version")// alternately - if using Java8, use the following instead of lifecycle-compilerimplementation("androidx.lifecycle:lifecycle-common-java8:$lifecycle_version")// optional - helpers for implementing LifecycleOwner in a Serviceimplementation("androidx.lifecycle:lifecycle-service:$lifecycle_version")// optional - ProcessLifecycleOwner provides a lifecycle for the whole application processimplementation("androidx.lifecycle:lifecycle-process:$lifecycle_version")// optional - ReactiveStreams support for LiveDataimplementation("androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version")// optional - Test helpers for LiveDatatestImplementation("androidx.arch.core:core-testing:$arch_version")}
Navigation
dependencies {val nav_version = "2.3.5"// Java language implementationimplementation("androidx.navigation:navigation-fragment:$nav_version")implementation("androidx.navigation:navigation-ui:$nav_version")// Kotlinimplementation("androidx.navigation:navigation-fragment-ktx:$nav_version")implementation("androidx.navigation:navigation-ui-ktx:$nav_version")// Feature module Supportimplementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version")// Testing NavigationandroidTestImplementation("androidx.navigation:navigation-testing:$nav_version")// Jetpack Compose Integrationimplementation("androidx.navigation:navigation-compose:2.4.0-alpha03")
}
Paging
dependencies {val paging_version = "3.0.0"implementation("androidx.paging:paging-runtime:$paging_version")// alternatively - without Android dependencies for teststestImplementation("androidx.paging:paging-common:$paging_version")// optional - RxJava2 supportimplementation("androidx.paging:paging-rxjava2:$paging_version")// optional - RxJava3 supportimplementation("androidx.paging:paging-rxjava3:$paging_version")// optional - Guava ListenableFuture supportimplementation("androidx.paging:paging-guava:$paging_version")// optional - Jetpack Compose integrationimplementation("androidx.paging:paging-compose:1.0.0-alpha11")
}
Room
dependencies {def room_version = "2.3.0"implementation("androidx.room:room-runtime:$room_version")annotationProcessor "androidx.room:room-compiler:$room_version"// To use Kotlin annotation processing tool (kapt)kapt("androidx.room:room-compiler:$room_version")// To use Kotlin Symbolic Processing (KSP)ksp("androidx.room:room-compiler:$room_version")// optional - Kotlin Extensions and Coroutines support for Roomimplementation("androidx.room:room-ktx:$room_version")// optional - RxJava2 support for Roomimplementation "androidx.room:room-rxjava2:$room_version"// optional - RxJava3 support for Roomimplementation "androidx.room:room-rxjava3:$room_version"// optional - Guava support for Room, including Optional and ListenableFutureimplementation "androidx.room:room-guava:$room_version"// optional - Test helperstestImplementation("androidx.room:room-testing:$room_version")
}
配置编译器选项
Room 具有以下注解处理器选项:
- room.schemaLocation:配置并启用将数据库架构导出到给定目录中的 JSON 文件的功能。如需了解详情,请参阅 Room 迁移。
- room.incremental:启用 Gradle 增量注解处理器。
- room.expandProjection:配置 Room 以重写查询,使其顶部星形投影在展开后仅包含 DAO 方法返回类型中定义的列。
以下代码段举例说明了如何配置这些选项:
android {...defaultConfig {...javaCompileOptions {annotationProcessorOptions {arguments += mapOf("room.schemaLocation" to "$projectDir/schemas","room.incremental" to "true","room.expandProjection" to "true")}}}
}
WorkManager
dependencies {val work_version = "2.5.0"// (Java only)implementation("androidx.work:work-runtime:$work_version")// Kotlin + coroutinesimplementation("androidx.work:work-runtime-ktx:$work_version")// optional - RxJava2 supportimplementation("androidx.work:work-rxjava2:$work_version")// optional - GCMNetworkManager supportimplementation("androidx.work:work-gcm:$work_version")// optional - Test helpersandroidTestImplementation("androidx.work:work-testing:$work_version")// optional - Multiprocess supportimplementation "androidx.work:work-multiprocess:$work_version"
}
如需了解如何使用 Kotlin 扩展,请参阅 ktx 文档。
Jetpack全家桶(一)之简介相关推荐
- 【React全家桶】react简介(一)
react简介 创建项目creat-react-app 1.1 React特点 1.2 引入文件 1.3 JSX 1.3.1 为什么要用JSX 1.3.2 JSX语法规则 1.4 虚拟DOM 1.5 ...
- react classname多个_React全家桶简介
当前前端开发已经进入以vue.react.webpack为代表的编程2.0时代.在1.0时代,代码是写给机器的:在2.0时代,代码是写给工具的,然后由工具处理后再转给机器. 一.React全家桶简介 ...
- 【大数据人工智能AI2.0】GPT-4 office 全家桶发布,打工人凛冬将至 :Microsoft 365 Copilot (副驾驶)简介
GPT-4 发布,只是一个开始. GPT-4 office 全家桶发布,打工人凛冬将至 Microsoft 365 Copilot 简介 北京时间今天凌晨,微软又发布了基于 GPT-4 的办公软件全家 ...
- Java Spring全家桶详解——Spring简介
今天新开一个专栏,专门讲解Spring全家桶的知识点,我会用通俗易懂的话讲解晦涩难懂的原理,并搭配代码演示,让大家快速入门 废话不多说,今天我们先学习Spring全家桶中的第一个框架:Spring 如 ...
- TensorFlow全家桶的落地开花 | 2019 Google开发者日
作者 | 唐小引写于上海世博中心 出品 | GDD 合作伙伴 CSDN(ID:CSDNnews) Android 10 原生支持 5G,Flutter 1.9.Dart 2.5 正式发布 这是 Goo ...
- eos操作系统_EOS基础全家桶(十一)智能合约IDE-EOS_Studio
简介 我们马上要进入智能合约的开发了,以太坊最初提供了智能合约的功能,并宣告区块链进入2.0时代,而EOS的智能合约更进一步,提供了更多的便利性和可能性.为了进一步了解智能合约,并进行开发,我们需要先 ...
- [转]vue全面介绍--全家桶、项目实例
慢慢了解vue及其全家桶的过程 原文http://blog.csdn.net/zhenghao35791/article/details/67639415 简介 "简单却不失优雅,小巧而不乏 ...
- vue全家桶+koa2+mongoDB打造全栈社区博客
背景 一直以来都想自己编写一个自己的社区博客,后来在网上找了一下,最后决定参考慕课网的一个社区项目,决定改用vue2.6+AntdForVue+koa2+mongoose实现一套社区博客. 简介 这是 ...
- 尚硅谷Vue技术全家桶(1)
尚硅谷Vue技术全家桶 课程来源于b站尚硅谷教程:一套搞定Vue技术全家桶,轻松拿捏vue3.0(vue.js全网最新) 课程简介 在这个vue2到vue3的过渡时期,需要兼顾2.x和3版本.尚硅谷的 ...
最新文章
- python csv.reader参数指定
- 供应链金融服务平台:应收、预付和存货融资业务
- metamask中的import account的代码实现
- 海外 谷歌 app api_Google App Engine Java功能和命名空间API
- androidfiletransfer_mac手机助手(Android File Transfer)下载_mac手机助手(Android File Transfer)官方下载...
- Sublime 自定义格式化快捷键
- 面试题:HashMap和ConcurrentHashMap的区别,HashMap的底层源码。
- python with open as yaml_python – pyyaml并仅使用字符串引号
- python设置字符串的格式_Python中的字符串格式
- Win7 SP1语言包微软官方下载地址及使用方法
- mysql case循环_php一次操作多个数据是循环更新好还是使用mysql里带的casewhen?性能方面哪个更有优势?...
- python基础词云制作——中国地图
- html字体大小vw,如何使用CSS vw尺寸单位实现响应式字体
- unity实现对话控制
- 谷歌浏览器无法记住密码问题
- Unity 你以为SetParent()是个很简单的API???!!
- 利用动态气泡图进行数据分析
- Mathematica基础及应用
- IndentationError:expected an indented block错误解决
- 视野:产业链,价值链,核心竞争力
热门文章
- 关于“labuladong的算法小抄”的学习笔记---第0章核心框架汇总的前半部分框架(c++版)
- [MSSQL]汉字转拼音函数实现语句
- U报错The path to the driver executable must be set by the webdriver.chrome.driver system property; for
- log4j.properties例子
- UUID 全世界的唯一id!(唯一的接口标识符)
- 车载录像机创见DrivePro 200 DIY安装
- java mysql的一次报错,Public Key Retrieval is not allowed
- 【图神经网络】简化 GCN(SGC)
- 从SGC(Server Gated Cryptography)技术看SSL证书的加密作用
- 设置字体样式:字号大小,字体种类,字体粗细