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

news2024/12/27 13:47:05

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 {
    @Provides
    fun 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 开发而设计的,涵盖了各种开发过程中的各个方面。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1217781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA无法查看源码是.class,而不是.java解决方案?

问题:在idea中,ctrl鼠标左键进入源码,但是有时候会出现无法查看反编译的源码,如图! 而我们需要的是方法1: mvn dependency:resolve -Dclassifiersources 注意:需要该模块的目录下,不是该文件目…

STM32_SPI总线驱动OLED详细原理讲解

目录 这里写目录标题 第13章 Cortex-M4-SPI总线13.1 SPI总线概述13.1.1 SPI总线介绍13.1.2 SPI总线接口与物理拓扑结构13.1.3 SPI总线通信原理13.1.4 SPI总线数据格式 13.2 IO口模拟SPI操作OLED13.2.1 常见的显示设备13.2.2 OLED显示屏概述13.2.3 OLED特征13.2.4 显示原理13.2.…

stylelint报错at-rule-no-unknown

stylelint报错at-rule-no-unknown stylelint还将各种 sass -rules 标记mixin为include显示未知错误 at-rule-no-unknown ✖ stylelint --fix:Deprecation warnings: 78:1 ✖ Unexpected unknown at-rule "mixin" at-rule-no-unknown 112:3 ✖ Unexpected un…

第四章 串【24王道数据结构笔记】

1.串的基本概念 串,即字符串 (String) 是由零个或多个字符组成的有限序列。一般记为Sa1a2.....an(n>0) S"HelloWorld!" TiPhone 11 Pro Max? 其中,S是串名,单引号括起来的字符序列是串的值;a;可以是字母、数字或其他字符;串中…

DocCMS keyword SQL注入漏洞复现 [附POC]

文章目录 DocCMS keyword SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 DocCMS keyword SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测…

idea中误删.iml和.idea文件,如何处理

目录 一、问题描述 二、解决方案 1、理论知识 (1).iml 文件 (2).idea文件 2、操作环境 3、操作步骤 (1)找到【Maven】工具按钮 (2)点图标,重复导入maven项目&am…

Pikachu漏洞练习平台之XXE(XML外部实体注入)

目录 什么是 XML? 什么是DTD? 什么是XEE? 常见payload 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language); XML 不会做任何事情,而是用来结构化、存储以及传输信息…

promise时效架构升级方案的实施及落地 | 京东物流技术团队

一、项目背景 为什么需要架构升级 promise时效包含两个子系统:内核时效计算系统(系统核心是时效计算)和组件化时效系统(系统核心是复杂业务处理以及多种时效业务聚合,承接结算下单黄金流程流量)&#xff…

SPASS-参数估计与假设检验

参数估计 点估计 点估计用样本统计量的值直接作为总体参数的估计值。如用样本均值直接作为总体均值的估计值,用样本方差直接作为总体方差的估计值等。 常用的点估计法 (1)矩估计法 (2)极大似然估计法 (3)稳健估计法 区间估计 因为点估计直接用样本估计值作为总体参数…

苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理?

环境: Mac mini M1 Mac os 11.0 绿盾v6.5 问题描述: 苹果MAC安装绿盾出现问题,安装时没有出现填服务器地址的页面,现在更改不了也卸载不了绿盾 怎么处理? 解决方案: 大部分企业是Windows和Mac终端混合使用,在进行文档加密管理时通常会遇到不兼容的现象,而为了统一…

Ubuntu 18.04无网络连接的n种可能办法

文章目录 网络图标消失,Ubuntu无网络连接VMware上Ubuntu18.04,桥接了多个网卡,其中一个用来上网,均设置为静态ip网络桥接链路没有接对路由不对 网络图标消失,Ubuntu无网络连接 sudo service network-manager stop sud…

python趣味编程-5分钟实现一个谷歌恐龙游戏(含源码、步骤讲解)

Python 恐龙游戏是为想要学习 Python 的初学者创建的。该项目系统使用了 Pygame 和 Random 模块。 Pygame 是一组跨平台的 Python 模块,专为编写视频游戏而设计。 Python 中的 Dino Game有一个任务记录,其中包含图片文档和 Python 内容(dino.py)。 GUI 使用 pygame 库。

Linux C 线程间同步机制

线程间同步机制 概述保护机制互斥锁创建互斥锁  pthread_mutex_init加锁  pthread_mutex_lock解锁  pthread_mutex_unlock删除锁  pthread_mutex_destroy 条件变量创建条件变量  pthread_cond_init激活条件变量  pthread_cond_signal等待条件变量  pthread_cond_…

Sentinel规则

一、服务熔断测试 例子: application.properties配置文件 server.port8083spring.application.nameorder#spring.cloud.nacos.discovery.server-addrhttp://192.168.44.64:80spring.cloud.nacos.discovery.server-addrlocalhost:8848spring.cloud.sentinel.transport.port999…

基于单片机的智能家居安保系统(论文+源码)

1.系统设计 本次基于单片机的智能家居安保系统设计,在功能上如下: 1)以51单片机为系统控制核心; 2)温度传感器、人体红外静释电、烟雾传感器来实现检测目的; 3)以GSM模块辅以按键来实现远/近程…

Nginx(四) absolute_redirect、server_name_in_redirect、port_in_redirect 请求重定向指令组合测试

本篇文章主要用来测试absolute_redirect、server_name_in_redirect和port_in_redirect三个指令对Nginx请求重定向的影响,Nginx配置详解请参考另一篇文章 Nginx(三) 配置文件详解 接下来,在Chrome无痕模式下进行测试。 测试1:absolute_redi…

yolov5模型代码怎么修改

yaml配置文件 深度乘积因子 宽度乘积因子 所有版本只有这两个参数的不同,s m l x逐渐加宽加深 各种类型层参数对照 backbone里的各层,在这里解析,只需要改.yaml里的各层参数就能控制网络结构 修改网络结构 第一步:把新加的模块…

用人话讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系

参考链接 本人学习使用,侵权删谢谢。用人话讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系 CUDA CUDA是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,是一种并行计算平台和编程模型&…

在屏幕上打印杨辉三角

我们先来看看杨辉三角长什么样的: 我们一起来看一看它的规则: 1. 每一行的第一个数字和最后一个数字都是1 2. 从第三行开始,中间的数字和最后一个数字等于它上方两个数字之和 我们可以很好的发现下面的数字就是由该数字上面一行和上一列加上该数字的…

redis设置密码

首先到redis的下载目录下:运行 redis-cli 查看redis密码: config get requirepass 设置redis密码为123456: config set requirepass 123456