首页 > 其他分享 >Jetpack Compose 入门与深入理解(一)

Jetpack Compose 入门与深入理解(一)

时间:2024-12-09 21:30:42浏览次数:5  
标签:Compose 入门 Jetpack text UI 命令式 刷新 Android 声明

Jetpack Compose

命令式UI(Imperative UI)

什么是命令式UI

在Android开发中,我们目前采用命令式UI开发模式

<!-- 代码经过简化 -->

<LinearLayout
    android:orientation="vertical"
    ... >
    
    <TextView
        android:id="@+id/text_view"
        android:text="text_old"
        ... />
        
    <ImageView
        android:id="@+id/image_view"
        android:src="@drawable/image_old"
        android:contentDescription="ImageDescription"
        ... />
        
</LinearLayout>
TextView textView = findViewById(R.id.text_view);
ImageView imageView = findViewById(R.id.image_view);
        
textView.setText("text_new");
imageView.setImageResource(R.drawable.image_new);
  • 首先,在XML中定义布局
  • 当需要更新UI时,通过View的id遍历UI树,找到对应的操作节点
  • 调用节点的相关方法进行更改

这就是Android当中的命令式UI,即UI的更新都需要手动刷新,UI与数据没有映射关系

命令式UI的缺点

  • UI刷新工作比较繁重

随着应用UI的复杂化,需要刷新UI的时机变得很多,如获取网络数据刷新页面、下拉刷新、滑动Banner、点击选择等涉及到用户交互的地方
刷新UI的时机变多,同时给开发者带来手动刷新也变多了,该过程的繁琐不仅涉及到:JQuery主导前端、Objective-C主导ios端、还是Java主导Android端的开发时代,开发者有相当一部分工作都是在处理UI的各种刷新

  • 容易出错

若项目中有一份数据,这份数据决定UI的呈现,开发者需要分开处理这两部分,数据变更后手动处理UI的刷新
一旦涉及到手动操作,便会提高出错的可能性,如果一个数据需要处理多个节点,很容易遗漏某个节点的更新;多种刷新操作针对同一个节点时,很容易造成冲突的异常状态

  • 性能问题

当一个UI组包含多个组件并且有多种状态时,开发者在进行手动刷新时,一般将此UI组中的全部组件进行刷新,这样会牺牲掉一部分性能,造成性能浪费
原因在于此UI组的状态过多,如果每次都通过对比只做必要性的刷新,也会增加代码的复杂度,后期更加难以维护

在这里插入图片描述

声明式UI(Declarative UI)

什么是声明式UI

由于Android中命令式UI的诸多问题,Google在2021年7月正式发布Jetpack Compose 1.0.0,至此我们可以在Android开发中使用Jetpack Compose进行声明式UI开发

// 代码经过简化

var text = "text_old"
var image = R.drawable.image_old

Column {
    Text(text = text)
    Image(painter = painterResource(image), contentDescription = "ImageDescription")
}
text = "text_new"
image = R.drawable.image_new

代码中没有XML布局,当text或者image的变量值发生改变时,UI自动刷新。这便是Android中的声明式UI,即UI会随着数据的变化而自动更新,UI与数据有映射关系

UI 是否自动刷新UI与数据是否有映射关系
命令式UI
声明式UI

声明式UI的优点

  • 没有UI刷新工作

在声明式UI中,开发者只需要关注数据与UI之间的映射关系即可,后续只用关注数据维护而不需要关注UI的刷新,极大减轻了UI的工作,这也是目前前端进入Vue和React时代完成编码比Android更快的原因之一

  • 不易出错

UI刷新是由框架实现,开发者只需要关注刷新数据,框架的可靠性保证了数据与UI的一致性

  • 性能提升

大部分声明式 UI 框架不会数据一变就全量刷新,提升了性能

声明式UI发展历程

  • WPF XAML
  • Qt Quick
  • React

2013 年 Facebook 发布 React,React 是用于构建 UI 界面的 Web 开发框架,React 在将声明式 UI 带入 Web 的同时,把声明式 UI 的发展推向高潮。React 使用 JSX 来描述界面,通过 Virtual DOM 技术最大程度减少前端对 DOM 的操作,从而提升渲染效率。

  • Vue

2014 年尤雨溪发布 Vue,Vue 是一套用于构建 UI 界面的渐进式 Web 框架,允许采用简洁模板语法,来声明式的将数据渲染 DOM 的系统,数据和 DOM 绑定在一起,所有的元素都是响应式的。

  • Flutter

2018 年 Google 发布 Flutter 1.0 版本,正式将声明式 UI 带入移动开发世界,Flutter 吸取了 React 的理念,把 UI 看作是状态函数,采用 Skia 作为渲染引擎。Skia 对平台的依赖只需要一个 GL Context,这使得 Flutter 具有强大的跨平台属性,能够运行在 Android、iOS、Windows、Linux、macOS,以及 Google 最新开发的操作系统 Fuchsia 上。

  • SwiftUI
  • Jetpack Compose

2021 年 Google 发布 Jetpack Compose 1.0.0,正式从 Android 上支持了声明式 UI 开发,表明了两大移动操作系统阵营全面拥抱声明式 UI。

  • Compose Multiplatform

标签:Compose,入门,Jetpack,text,UI,命令式,刷新,Android,声明
From: https://blog.csdn.net/qq_53092981/article/details/144241885

相关文章

  • 全网最全的 Cobalt Strike 使用教程-内网渗透之域控攻击篇!黑客技术零基础入门到精通教
    免责声明本号所发布的文章及工具只限交流学习,本人不承担任何责任!一、前言在本篇文章中强哥将继续为大家介绍一些攻击域控制器时常用的一些方法,为了方便演示,强哥是直接在目标域控制器下进行一系列操作的,在真实环境下,大家需要通过MSF、CS等内网渗透工具获取目标主机权......
  • 【docker】容器编排工具docker-compose常用命令
    一、官网https://docs.docker.com/compose/install/  二、命令介绍$docker-compose--helpDefineandrunmulti-containerapplicationswithDocker.Usage:docker-compose[-f<arg>...][--profile<name>...][options][--][COMMAND][ARGS...]docker......
  • JavaScript 基础语法入门
    JavaScript是一种运行在浏览器中的编程语言,适合初学者快速上手。以下内容是JavaScript的基础语法介绍。1.JavaScript的引入方式内嵌式在HTML文件中,通过<script>console.log("Hello,JavaScript!");</script>外部文件引入将JavaScript写入独立的文......
  • 渗透测试人员的 Nmap:漏洞扫描零基础入门教程,网络安全看这一篇就够了!
    此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用......
  • 【人工智能】Moss-AI编程利器:CodeMoss & ChatGPT中文版超详细入门教程!(VScode/IDER/WE
    文章目录摘要一、环境介绍VSvode安装步骤IDER(Pycharm)安装步骤Web使用步骤二、Moss9大功能讲解1、AI问答对话2、文件上传功能3、自定义AI助手4、AI联网助手5、AI图片识别6、思维链思维链的简单介绍使用CodeMoss思维链7、AI图片生成图片生成效果8、图片生成代码9、......
  • Top Cluster 树分块入门学习笔记
    定义树簇(Cluster):将树上的边划分为若干个连通块,称为树簇。界点、内点:每个树簇内有两个界点,其他点为内点,满足两个树簇至多交于一个界点。簇路径:对于每个树簇,其内部两个界点之间的路径为簇路径。由于这里不是学习TopTree的地方,所以舍去了某些其他内容。树簇分块给定......
  • 洛谷题单python解【入门2】分支结构
    P2433【深基1-2】小学数学N合一importmathn=int(input())ifn==1:print('IloveLuogu!')elifn==2:print(2+4,10-2-4)elifn==3:print(14//4)print(14-14%4)print(14%4)elifn==4:print("%.3f"%(500/3))elifn==5:......
  • 洛谷题单python解【入门1】顺序结构
    B2002Hello,World print("Hello,World!")B2025输出字符菱形print("*")print("***")print("*****")print("***")print("*")P1000超级玛丽游戏print("""********......
  • 2024年最新最全网络安全护网行动指南【附零基础入门教程】_网络安全靶场整个业务指南
    前言随着《网络安全法》和《等级保护制度条例2.0》的颁布,国内企业的网络安全建设需与时俱进,要更加注重业务场景的安全性并合理部署网络安全硬件产品,严防死守“网络安全”底线。“HW行动”大幕开启,国联易安誓为政府、企事业单位网络安全护航!,网络安全形势变得尤为复杂严峻。......
  • DP(动态规划)入门相关书籍
    1、一本通启蒙C++版2、算法训练营:入门篇(全彩版)3、算法竞赛实战笔记(2024.01)4、聪明人的游戏信息学探秘.提高篇-2017年06月5、哇,编程!——跟小明一起学算法(2020.05)6、算法入门之西游漫记——Python语言版(2022.03)7、CCF中学生计算机程序设计提高篇......