当前位置: 首页 > news >正文

Android Jetpack的组件介绍,常见组件解析

jetpack组件有哪些

Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别:

  • 架构组件(Architecture Components)
  • UI组件(UI Components)
  • 行为组件(Behavior Components)
  • 基础组件(Foundation Components)

架构组件包括Room, LiveData, ViewModel和Data Binding。UI组件包括RecyclerView、Paging、Navigation等等。行为组件包括WorkManager和Notifications。基础组件包括AppCompat、Multidex、Test、安全等等。

jetpack常用组件

1. Room

Room 是一个 SQLite 对象映射库,让您能够在应用中使用数据库,同时充分利用 LiveData、ViewModel 和协程等现代化库。

@Entity
data class User(@PrimaryKey val uid: Int,@ColumnInfo(name = "first_name") val firstName: String?,@ColumnInfo(name = "last_name") val lastName: String?
)

2. LiveData

LiveData是一个生命周期感知的可观察数据存储器类,可帮助您构建响应式,健壮和可测试的界面。LiveData经常与ViewModel一起使用,使数据更新后可以自动更新UI。

val mutableLiveData = MutableLiveData("Hello World")
mutableLiveData.observe(this, Observer { s -> text_view.text = s })

3. ViewModel

ViewModel是一个专门为UI层开发的类,通过保存数据的方式,解决了UI层重建,数据丢失的问题。ViewModel可以确保当配置更改、活动终止并重新创建时,数据会立即恢复。

class MyViewModel : ViewModel() {private val users: MutableLiveData> by lazy {MutableLiveData>().also {loadUsers()}}fun getUsers(): LiveData> {return users}private fun loadUsers() {// Do an asynchronous operation to fetch users.}
}

4. Data Binding

数据绑定库(Data Binding Library)可以让您以声明方式将可观察对象绑定到界面元素。它的出现,让每一个具有一定业务逻辑的界面都可以得到简化,以减少代码的编写以及针对Eclipse, ADT 和 Android Studio 等不同工具,提供了最方便的开发环境的支持工具。

Jetpack 的存在意义

1、提高开发效率

  • Jetpack 提供了 大量 现成 的 组件 和 工具 , 可以快速 构建 高质量 / 高性能 的 Android 工程 , 并且可以 提高 代码的 稳定性 , 可维护性 ;
  • 使用 Jetpack 库 , 减少了很多 重复性的 代码工作 , 提高了开发效率 ;

2、最佳架构方案

  • Jetpack 是 Google 推荐的最佳的架构方案 , 一直在 不断更新 , 并且 兼容之前的 Android 系统版本 ;
  • 使用 Jetpack 可以减少 架构带来 内存泄漏 和 崩溃 ;

3、消除样本代码

  • 使用 Jetpack 开发套件 , 可以轻松进行 工程架构 , 减少不必要的 架构相关的样板代码 , 开发者只需要专心开发自己的逻辑代码即可 ;
  • Jetpack 提供了一套 UI , 行为 , 架构 相关的解决方案 , 开发者可以不用再架构上浪费时间 , 专心开发自己的逻辑 ;
  • 样板代码示例 : Activity 中管理各种生命周期 ;

4、设备系统兼容性

  • 开发 Android 应用 , 需要 考虑到 Android 的各个版本的特性 , 以及 各个 Android 手机厂商的适配问题 , 需要花费大量的时间精力进行适配工作 ;
  • 使用 Jetpack 可以保证 在 各个 Android 版本 , 各种 Android 设备中 , 保持运行一致 , 可以降低 测试 , 适配 的 工作量 ;
  • Jetpack 自带设备系统兼容性解决方案 ;

5、改善应用性能

  • 使用 Jetpack 提供的 一系列的 组件 和 工具 , 可以
  • 提高 应用的 性能 ,
  • 提高 代码稳定性 ,
  • 提高 代码可维护性 ,
  • 减少应用崩溃 ,
  • 减少应用内存泄漏 ;

6、测试支持

  • Jetpack 提供了一系列的 测试组件 ,
  • 借助 Espresso , UI Automator , JUnit 测试组件 ,
  • 可以快速 创建 Android 自动化测试 功能 ,
  • 提高 程序的 质量 , 提高代码的稳定性 ;

jetpack组件库

Jetpack还有一些组件库,比如Hilt, WorkManager, CameraX和Compose等等。

1. Hilt

Hilt是Android的依赖注入库,用于定义应用程序中的类之间的依赖关系。它简化了和Dagger2一样的依赖注入过程,并简化了注入实例的进程。

@InstallIn(SingletonComponent::class)
@Module
class MyModule {@Providesfun provideFoo(): Foo = Foo() 
}class Foo @Inject constructor()

2. WorkManager

WorkManager是一个API,它让您能够安排后台任务,即使应用已经退出或设备已经重启。有了WorkManager,您可以针对应用使用情况定义灵活且轻量化的任务,并确保在设备单独的线程上以可靠、一致的方式运行。

val uploadWorkRequest = OneTimeWorkRequestBuilder().build()
WorkManager.getInstance(context).enqueue(uploadWorkRequest)

3. CameraX

CameraX是一组相机API,可让您轻松访问设备的摄像头。它有着简单易用的API,便于开发者使用。CameraX 支持多种设备,版本兼容,可读性高。

val preview = Preview.Builder().build()
val analysisUseCase = ImageAnalysis.Builder().build()
val imageCapture = ImageCapture.Builder().setTargetRotation(previewView.display.rotation).build()

本文就主要讲解了,在Android Jetpack中的组件有哪些,常用的组件介绍,更多Android Jetpack的学习可以参考《Android Jetpack笔记》点击就可以查看详细的类目板块,也可以拿取。

結尾

到目前为止,Jetpack包含80多个库的组件。每个库都是专为 Android 开发而设计的,涵盖了各种开发过程中的各个方面。

相关文章:

Android Jetpack的组件介绍,常见组件解析

jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…...

ImportError: cannot import name ‘url_quote‘ from...

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...

一文看分布式锁

为什么会存在分布式锁? 经典场景-扣库存,多人去同时购买一件商品,首先会查询判断是否有剩余,如果有进行购买并扣减库存,没有提示库存不足。假如现在仅存有一件商品,3人同时购买,三个线程同时执…...

Jenkins自动化部署一个Maven项目

Jenkins自动化部署 提示:本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…...

K8S1.23.5部署(此前1.17版本步骤囊括)及问题记录

应版本需求,升级容器版本为1.23.5 kubernetes组件 一个kubernetes集群主要由控制节点(master)与工作节点(node)组成,每个节点上需要安装不同的组件。 master控制节点:负责整个集群的管理。 …...

基于java web的中小型人力资源管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

Python学习笔记--Python关键字yield

原文:http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained 注:这是一篇 stackoverflow 上一个火爆帖子的译文 问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self,…...

CF 850 C Arpa and a game with Mojtaba(爆搜优化SG)

CF 850 C. Arpa and a game with Mojtaba(爆搜优化SG) Problem - C - Codeforces Arpa and a game with Mojtaba - 洛谷 思路:显然对于每一种质因子来说操作都是独立的 , 因此可以考虑对于每一种质因子求当前质因子的SG &#…...

kafka分布式安装部署

1.集群规划 2.集群部署 官方下载地址:http://kafka.apache.org/downloads.html (1)上传并解压安装包 [zhangflink9wmwtivvjuibcd2e package]$ tar -zxvf kafka_2.12-3.3.1.tgz -C ../software/(2)修改解压后的文件…...

[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)

文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类…...

java:IDEA中的Scratches and Consoles

背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境,用于写一些文本内容或者代码片段。 其中,Scratch files拥有完整的运行和debug功能,这些文件需要指定编程语言类型并且指定后缀。 举例:调接口 可以看到…...

华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯

近日,日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解,揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示,该手机的国产零部件比例达到了47%,相较于三年前的 Mate 40 Pro,提高…...

ZBrush 2024(三维数字雕刻软件)

ZBrush是一款Mac数字雕刻软件,它具有以下功能: 雕刻工具:ZBrush的雕刻工具非常强大,可以让用户在3D模型上进行雕刻,就像使用传统雕塑工具一样。高精度模型创建:ZBrush可以创建高精度的3D模型,适…...

wpf devexpress 排序、分组、过滤数据

这个教程示范在GridControl如何排序数据,分组数据给一个行创建一个过滤。这个教程基于前一个教程。 排序数据 可以使用GridControl 排序数据。这个例子如下过滤数据对于Order Date 和 Customer Id 行: 1、对于Order Date 和 Customer Id 行指定Colum…...

使用Badboy录制生成 JMeter 脚本

JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…...

V10 桌面版、服务器版系统加固

V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括:密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…...

mtgsig1.2简单分析

{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…...

场景交互与场景漫游-osgGA库(5)

osgGA库 osgGA库是OSG的一个附加的工具库,它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成,即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…...

Leetcode -1

Leetcode Leetcode -521.最长特殊序列Leetcode - 541.反转字符串Ⅱ Leetcode -521.最长特殊序列 题目:给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列的长度。如果不存在,则返回 - 1 。 「最长特殊序列」 定义如下&#xff1…...

系列四、JVM的内存结构【本地接口(Native Interface)】

一、组成 本地接口由本地方法栈(Native Method Stack)、本地方法接口(Native Interface)、本地方法库组成。 二、本地接口的作用 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C程序,Jav…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...