Jetpack Compose与声明式UI(1)

导读大纲

    • 1.1 什么是声明式UI?
      • 1.1.1 描述所需状态:
      • 1.1.2 UI就是一个带有状态的函数
      • 1.1.3 UI自动更新
      • 1.1.4 主要优势
    • 1.2 声明式UI的优势
    • 1.3 Jetpack Compose 简介
      • 1.3.1 主要功能和亮点
      • 1.3.2 为什么选择 Jetpack Compose?

1.1 什么是声明式UI?

  1. 在用户界面开发领域,声明式UI对传统命令式方法的一种范式转换
    • 就其核心而言,声明式UI编程围绕以下关键原则展开

1.1.1 描述所需状态:

  1. 声明式UI的精髓在于关注用户界面在任何特定时刻应该是什么样子

    • 不是纠缠于如何实现它的琐碎细节
  2. 不需要编写操作视图的步骤说明, 例如,找到这个按钮,更改文字,然后隐藏图片

    • 只需声明你希望用户界面处于的最终状态

1.1.2 UI就是一个带有状态的函数

  1. 在声明式范例中,UI就是维护其底层状态的直接函数

    • 状态代表影响用户界面外观和行为数据和变量
  2. 只要状态发生变化(例如,由于用户输入、数据获取或内部逻辑)

    • 用户界面就会自动重新渲染,以准确反映新的状态

1.1.3 UI自动更新

  1. 声明式UI(declarative UIs)最强大的功能之一

    • 就是能够在状态发生变化时自动更新
  2. 底层框架(这里是Jetpack Compose)会找出最有效的方法

    • 将用户界面从当前状态过渡到新的预期状态
  3. 这样,您就无需手动跟踪和更新各个UI元素

    • 从而大大降低出错和不一致的风险.

1.1.4 主要优势

  1. 声明式UI有很多好处

    • 提高可读性和可维护性
      1. 声明式UI代码通常更简洁、更易理解、更不易出错.
    • 减少模板
      1. 由于无需关注低级用户界面操作,因此代码编写量更少.
    • 增强用户界面一致性
      1. 由于用户界面始终反映当前状态,因此不容易脱节
    • 更简单的状态管理
      1. 框架可处理复杂的状态更新,让你更轻松地管理App的数据和逻辑
    • 提高性能
      1. 该框架可优化用户界面更新,从而带来更流畅、响应更迅速的用户体验
  2. 让我们用一个简单的例子来说明(使用伪代码)

    • <1> Imperative Approach (Traditional)
    • <2> Declarative Approach (Jetpack Compose)
      1. MyUI 函数根据 buttonText 和 showImage 变量描述UI所需的状态
      2. 如果这些变量发生变化,Jetpack Compose会自动重新渲染UI
        • 使其与新的状态相匹配
================================================= <1>
// Find the button
Button myButton = findViewById(R.id.myButton);
// Change the button's text
myButton.setText("New Text");
// Hide an image view
ImageView myImage = findViewById(R.id.myImage);
myImage.setVisibility(View.GONE);
================================================ <2>
@Composable
fun MyUI(buttonText: String, showImage: Boolean) {Button(onClick = { /* ... */ }) {Text(text = buttonText)}if (showImage) {Image(painter = painterResource(id = R.drawable.my_image), contentDescription = "My Image")}
}

1.2 声明式UI的优势

  1. 以 Jetpack Compose 为代表的声明式UI与传统的命令式用户界面开发方法相比

    • 提高代码的可读性和可维护性
      1. 声明式UI代码往往更简洁,也更容易理解
      2. 通过专注于描述所需的UI状态,而不是实现该状态的程序步骤
        • 开发人员可以编写出与UI视觉结构密切相关的代码
      3. 这使得原作者和其他开发人员更容易掌握代码的意图
        • 并放心地进行修改
    • 减少模板代码
      1. 命令式用户界面代码通常包含大量模板
        • 用于查找视图、设置属性和处理更新的重复代码
      2. 声明式UI抽象掉大部分模板
        • 使开发人员能够更简洁地表达他们的UI逻辑
      3. 代码量的减少可以加快开发周期,减少错误发生的机会
    • 增强用户界面的一致性和可预测性
      1. 在声明式UI中,用户界面总是反映应用程序的当前状态
      2. 状态和UI之间的这种紧密耦合确保用户界面的一致性和可预测性
        • 无论用户界面的状态如何变化
      3. 对于复杂的用户界面尤为重要,因为在命令式方法
        • 管理状态和UI元素之间的同步是一项挑战
    • 更便捷的状态管理
      1. 声明式UI通常具有内置的状态管理机制
      2. Jetpack Compose 等框架提供的工具和模式
        • 可以帮助开发人员高效地管理UI组件的状态
      3. 这就简化UI与底层数据保持同步的过程,减轻开发人员的认知负担
        • 从而开发出更强大的应用程序.
    • 通过优化UI更新提高性能
      1. 声明式UI框架通常采用智能算法优化用户界面更新
      2. 当状态发生变化时,框架会分析新旧状态之间的差异
        • 只更新UI的必要部分
      3. 这可以显著提高性能,尤其是在复杂和动态的用户界面
        • 不必要的重绘可能会导致高昂的成本
  2. 现实世界的影响

    • 声明式UI的优势在实际开发场景中转化为实实在在的优势
    • 由于声明式代码固有的清晰度和结构,采用声明式框架的团队
      1. 往往能加快开发周期减少错误数量并改善协作
    • 此外,这些框架提供的性能优化还带来更流畅、响应更灵敏的用户体验

1.3 Jetpack Compose 简介

  1. Jetpack Compose 是谷歌推出的一款革命性UI工具包

    • 有望重塑 Android UI开发的格局
  2. Jetpack Compose 采用现代原则设计,建立在 Kotlin 的坚实基础之上

    • 制作原生 Android UI提供一种全新而高效的方法

1.3.1 主要功能和亮点

  1. 声明式UI范例

    • Jetpack Compose 全心全意地接受声明式UI范例
      1. 这是对传统命令式方法的根本性转变
    • 在这种范例中,开发人员描述用户界面所需的状态
      1. 不是明确指示如何实现它
    • 这种声明性使代码更简洁、更易于推理、更不易出错
  2. 基于 Kotlin 构建

    • Jetpack Compose 与 Kotlin 实现无缝集成
      1. Kotlin 是谷歌针对安卓开发推出的现代且极具表现力的编程语言
    • 这种集成使开发人员能够利用 Kotlin 的强大功能
      1. 如 coroutines、扩展函数和 lambda 表达式
  3. 无缝集成

    • 虽然 Jetpack Compose 代表一种全新的UI构建方式
      1. 但其设计旨在与现有的 Android 代码库无缝集成
    • 开发人员可以在他们的项目中逐步采用 Compose
      1. 逐渐用composable函数取代传统的UI元素
    • 这种灵活性使团队能够按照自己的节奏过渡到 Compose
      1. 不会中断正在进行的开发工作
  4. Material Design集成

    • Jetpack Compose 与 Material Design 深度集成
    • Material Design 是谷歌的综合设计系统
      1. 用于创建具有视觉吸引力且用户友好的界面
    • Jetpack Compose提供丰富的预建 Material Design 组件和样式选项
      1. 使开发人员能够快速创建美观、一致的遵循现代设计原则的用户界面

1.3.2 为什么选择 Jetpack Compose?

  1. Jetpack Compose 提供一系列引人注目的优势,使其成为安卓UI开发的不二之选

    • 提高生产力
      1. Compose 的声明性与其直观的 Kotlin API 相结合
        • 大大提高开发人员的工作效率
      2. 由于减少模板代码,并专注于用户界面状态的描述
        • 开发人员可以快速迭代,更高效地实现他们的想法
    • 增强可维护性
      1. 由于其声明式结构和复杂性的降低
        • Compose代码本身就具有更高的可维护性
      2. UI描述与底层实现细节的分离
        • 使得与UI相关的代码更容易理解、修改和调试.
    • 现代 UI 开发
      1. Jetpack Compose 代表着 Android UI 开发的未来
      2. 通过采用 Compose,开发人员可以将自己置于 Android 技术的最前沿
        • 并获得创建尖端UI的最新工具和最佳实践
  2. Jetpack Compose 不仅仅是一个新的UI工具包,它还是一种模式的转变

    • 使开发人员能够以前所未有的轻松表现力和效率创建 Android UI
  3. 无论是开始一个新项目,还是增强现有项目

    • Jetpack Compose 都将为创建卓越的 Android 应用程序提供无限可能

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

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

相关文章

【编程底层原理】Java常用读写锁的使用和原理

一、引言 在Java的并发世界中&#xff0c;合理地管理对共享资源的访问是至关重要的。读写锁&#xff08;ReadWriteLock&#xff09;正是一种能让多个线程同时读取共享资源&#xff0c;而写入资源时需要独占访问的同步工具。本文将带你了解读写锁的使用方法、原理以及它如何提高…

【重磅】考虑火电机组储热改造的电力系统低碳经济调度

目录 1 主要内容 储热改造原理 约束条件 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑火电机组储热改造的电力系统低碳经济调度》&#xff0c;利用原文献火电机组储热改造方案建立模型&#xff0c;在传统火电机组的基础上加装热能存储系统&#xf…

【每天学个新注解】Day 3 Lombok注解简解(二)—@Log

Log 自动创建并初始化日志记录器 日志系列注解包括&#xff1a;CommonsLog、Flogger、JBossLog、Log、Log4j、Log4j2、Slf4j、XSlf4j、CustomLog&#xff0c;对应于不同的日志框架。每个注解都会在编译时生成一个名为 log 的静态字段&#xff0c;该字段被初始化为对应的日志框…

【小白向】怎么去除视频水印?HitPaw帮你轻松解决

序言 HitPaw是一款优秀的去除视频水印的工具。 特点&#xff1a;不仅仅能够去除图片、视频里的固定水印&#xff0c;还能去除移动水印。 尤其是它的AI去水印功能&#xff0c;效果非常好。 极简使用教程 下载安装 HitPaw需要在电脑上安装软件才能使用。 支持Windows系统和…

基于SpringBoot+Vue+MySQL的旅游推荐管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着社会的快速发展和人民生活水平的显著提高&#xff0c;旅游已成为人们休闲娱乐的重要方式。然而&#xff0c;面对海量的旅游信息和多样化的旅游需求&#xff0c;如何高效地管理和推荐旅游资源成为了一个亟待解决的问题。因此…

JavaSE--IO流总览03:复制照片案例,解决关闭流异常的方法

概述&#xff1a;本篇主要是讲述根据上一篇的知识完成一个小需求&#xff1a;图片的复制&#xff0c;以及关闭流的异常以及解决方法 一.照片的复制&#xff1a; 注意&#xff1a;字节流非常适合做一切文件的复制作 &#xff0c;任何文件的底层都是字节 字节流做复制 是一字不…

MODELS 2024:闪现奥地利,现场直击报道

周末出逃&#xff01;小编闪现至奥地利林茨&#xff0c;亲临第27届MODELS 2024国际会议&#xff0c;以第一视角引领你深入会议现场&#xff0c;领略其独特风采。利用午饭时间&#xff0c;小编紧急码字&#xff0c;只为第一时间将热点资讯呈现给你~ 会议介绍&#xff1a; MODEL…

Cilium + ebpf 系列文章-ebpf-map(二)

前言: 上一章节讲述了什么是:ebpf. Cilium + ebpf 系列文章-什么是ebpf?(一)-CSDN博客一、We Create a container be a Server.二、We Create a container be a Client.三、Them link at a Bridge.四、 Do test.一、Test-tools。3、当你执行l s操作时,会调用open的系统调…

线程对象的生命周期、线程等待和分离

线程对象的生命周期、线程等待和分离 #include <iostream> #include<thread> using namespace std;bool is_exit false;//用于判断主线程是否退出 void ThreadMain() {cout << "begin sub thread main ID: " << this_thread::get_id() &l…

难题妙解——前K个高频单词

1.题目解析 692.前K个高频单词 本题⽬我们利⽤map统计出次数以后&#xff0c;返回的答案应该按单词出现频率由⾼到低排序&#xff0c;有⼀个特殊要 求&#xff0c;如果不同的单词有相同出现频率&#xff0c;按字典顺序排序 2.算法原理 2.1思路一 ⽤排序找前k个单词&#xff0c…

栈的操作:进栈,出栈,读栈顶元素

代码&#xff1a; #include<iostream> using namespace std; template<class T> class sq_Stack {private:int mm;int top;T *s;public:sq_Stack(int);void prt_sq_Stack();int flag_sq_Stack();void ins_sq_Stack(T);T del_sq_Stack();T read_sq_Stack(); }; tem…

【自学笔记】支持向量机(3)——软间隔

引入 上一回解决了SVM在曲线边界的上的使用&#xff0c;使得非线性数据集也能得到正确的分类。然而&#xff0c;对于一个大数据集来说&#xff0c;极有可能大体呈线性分类趋势&#xff0c;但是边界处混杂&#xff0c;若仍采用原来的方式&#xff0c;会得到极其复杂的超平面边界…

Linux: filesystem:resize2fs: error: superblock checksum does not match

最近遇到一个resize2fs命令的错误:superblock checksum does not match superblock while trying to open。 而且问题的出现有随机性。 <qrms6-oam-b:root>/root: #rpm -qf /usr

通信工程学习:什么是VM虚拟机

VM&#xff1a;虚拟机 VM虚拟机&#xff08;Virtual Machine&#xff09;是一种通过软件模拟的计算机系统&#xff0c;它能够在物理计算机上模拟并运行多个独立的虚拟计算机系统。以下是关于VM虚拟机的详细解释&#xff1a; 一、VM虚拟机的定义与原理 定义&#xff1a; VM虚拟…

【ZYNQ 开发】填坑!双核数据采集系统LWIP TCP发送,运行一段时间不再发送且无法ping通的问题解决

问题描述 之所以说是填坑&#xff0c;是因为之前写了一篇关于这个双核数据采集系统的调试记录&#xff0c;问题的具体表现是系统会在运行一段时间后&#xff08;随机不定时&#xff0c;长了可能将近两小时&#xff0c;短则几分钟&#xff09;&#xff0c;突然间就不向电脑发送数…

Redis渐进式遍历

我们知道&#xff0c;keys* 是一次性把所有的key都获取到&#xff0c;这个操作太危险&#xff0c;可能会一次性得到太多的key而阻塞服务器。但是通过渐进式遍历&#xff0c;既能够获取到所有的key&#xff0c;又能不会卡死服务器。 redis使用scan命令进行渐进式遍历&#xff0…

对条件语言模型(Conditional Language Model)的目标函数的理解

在翻看LORA这篇论文的时候&#xff0c;忽然对条件语言模型优化的目标函数产生了一些疑问&#xff0c;下面是理解。 这个目标函数描述了条件语言模型&#xff08;Conditional Language Model&#xff09;的目标&#xff0c;即通过最大化对数似然估计来学习参数( Φ \Phi Φ)&a…

MySQL和SQL的区别简单了解和分析使用以及个人总结

MySQL的基本了解 运行环境&#xff0c;这是一种后台运行的服务&#xff0c;想要使用必须打开后台服务&#xff0c;这个后台服务启动的名字是在安装中定义的如下图&#xff08;个人定义MySQL88&#xff09;区分大小写图片来源 可以使用命令net start/stop 服务名&#xff0c;开…

【高并发内存池】基本框架 + 固定长度内存池实现 1

高并发内存池 1. 基本框架2. 定长内存池的实现2.1 介绍定长内存池2.2 T* New()2.3 void Delete(T* obj) 3. 源码&#xff08;附赠测试&#xff09;4. 总结 1. 基本框架 高并发内存池主要由三个部分构成&#xff1a; 1.thread cache:用于小于256KB的内存的分配。线程缓存是每个…

流域碳中和技术

随着全球气候变化的加剧&#xff0c;碳中和已成为实现可持续发展的重要目标之一。碳中和不仅仅是能源和工业领域的调整&#xff0c;它涉及整个生态系统的转型与再生。在这一过程中&#xff0c;流域的生态系统作为水、土、生物多样性等自然资源的集成体&#xff0c;扮演着至关重…