ArkUI进阶-性能优化

ArkUI性能优化(1)—优化布局性能 不合理的页面布局(如:嵌套层级过多等)会导致加载慢、掉帧等现象,造成不好影响在布局阶段中,如果视图嵌套层级较深,或者页面节点过多,会导致在Measure和layout过程中,通过遍历测量组件大小和边界的时间过长。所以布局性能优化,可以从减少节点数或者优化布局测算时间方面来考虑。 阅读详情

布局性能优化

基本布局流程

在ArkUI的布局过程中,应用侧会根据前端UI描述创建后端的页面节点树,包含处理UI组件属性更新,布局测算,事件处理等逻辑。

在这里插入图片描述

例如上述布局:

  1. 应用会根据我们的代码,创建对应的node节点树,其中,Custom Node表示自定义组件节点,Frame Node节点表示系统组件节点。
  2. 在这个过程中,UI线程会对每个元素进行测算measure和布局lauout,来确定具体的位置和大小,measure阶段负责确定组件的测量宽高,也就是该组件元素占用的屏幕大小,layout阶段会确定最终宽高和四个顶点的位置。
  3. 根据页面节点树,生成当前界面描述数据结构–渲染树。渲染树由RenderNode渲染节点组成,描述了具体元素在屏幕上的布局信息,包含大小、位置以及一些其他属性。
  4. 渲染服务的渲染线程会根据渲染树的信息执行相应的绘制工作。

在布局阶段中,如果视图嵌套层级较深,或者页面节点过多,会导致在Measure和layout过程中,通过遍历测量组件大小和边界的时间过长。所以布局性能优化,可以从减少节点数或者优化布局测算时间方面来考虑。

精简节点数

首先我们先看一下相同数量节点嵌套和平铺的情况下,对性能的影响,通过使用IDE的profiler工具进行抓取,可以得知:
在这里插入图片描述

从上边我们可以看出,在相同组件、相同数量的情况下,嵌套和平铺对性能的影响差距不是很大,主要影响性能的还是节点数量,所以我们在进行布局的时候,应该尽量减少参与布局的节点数,来减少布局的性能消耗。

主要有两个优化方向:

  1. 移除冗余节点。
  2. 使用扁平化布局,减少层级嵌套,如RelativeContainer、Grid等。

合理控制元素的隐藏与显示

在ArkUI中,控制元素隐藏和显示,一般有两种方式,使用条件语句控制,或者使用visibility属性来控制。

我们来对比使用条件渲染语句和使用visibility属性来控制时,measure和layout耗时区别:

首次渲染:

在这里插入图片描述
我们可以看到,使用条件渲染语句时,当条件为false时,对应组件不参与measure和layout阶段。使用visibility属性进行控制的时候,无论组件是否显示,都会参与measure阶段,如果visibility为none,那么组件不参与layout阶段。

切换显示

在这里插入图片描述
我们可以看到,切换显示状态的时候,使用条件渲染语句,会根据条件来判断组件是否创建,切换过程会出现较大的性能消耗,且每次切换消耗相同。使用visibility的时候,性能消耗要小很多。

综上所述,在控制组件的显示与隐藏时,我们可以遵循以下原则:

  • 对性能要求较高,且会频繁切换显示与隐藏的情况下,使用visibility属性进行控制。
  • 组件创建性能消耗较大,且初始状态下不可见,并且不会频繁切换的情况下,使用条件渲染语句进行控制。

给定组件的宽高

在ArkUI中,我们给组件设置宽高的方式,一般分为三种:设置固定值、百分比宽高、不设置宽高。

我们对比三种情况下的measure和layout的耗时

在这里插入图片描述
初次加载时,三种情况消耗差距不大,原因是初次加载的时候,所有的组件都参与了measure和layout过程。

在这里插入图片描述
在重绘的过程中,我们可以看到,给定宽高的组件,所消耗的性能明显小于其他两种方式,原因是修改宽高触发重绘的情况下, 给定内部组件宽高时,内部组件可以重用初次measure和layout数据,不设置宽高和百分比宽高的,由于父容器宽高发生了变化,所以需要参与measure和layout过程。

使用推荐的布局组件

越是复杂的布局,measure和layout的过程越是耗时,比如grid组件就会比row组件耗时,但是如果使用grid组件,可以明显减少页面的节点数量或者是嵌套层级数量,那么此时所节省的性能会明显优于grid组件多消耗的性能。

长列表加载性能优化

长列表优化概述

针对长列表加载场景,对列表渲染速度、页面滑动帧率、内存占用大小等方面进行优化,主要有以下几个方面

  • 懒加载:提供列表数据按需加载的能力,解决一次性加载列表项耗时过长,占用过多资源的问题,提升页面加载速度。
  • 缓存列表项:提供屏幕可视区域外列表缓存长度的自定义调节能力,配合懒加载使用,缓存页面数据,预加载页面外列表项,提升列表滑动体验。
  • 组件复用:提供可复用组件对象的缓存资源池,通过重复使用已经创建并缓存的组件对象,降低相同组件短时间内频繁创建和销毁的消耗,提升渲染效率。
  • 布局优化:使用扁平布局,减少视图嵌套层级和节点数,提升渲染效率。

懒加载

当列表数据量较小且布局较为简单的时候,我们可以使用ForEach渲染语句。
当列表数据量较大时,使用lazyForEach渲染语句实现懒加载的效果。

使用lazyForEach渲染语句时,最小可以做到仅加载渲染屏幕当前显示的列表项。

缓存列表项

我们使用了lazyForEach懒加载时,默认只会渲染当前屏幕显示的列表项,那么当我们快速滑动的时候,就会出现白块的现象。

lazyForEach可以通过设置cachedCount来缓存或预加载一定数量的列表项,比如当前屏幕最大可以显示5条,cachedCount为3,那么此时挂载在组件树上的列表项,最多可以是11条。

组件复用

  1. 在item列表项的自定义组件头部添加@Reusable装饰器,标识该组件拥有复用的能力。
  2. 实现可复用自定义组件的生命周期aboutToReuse方法,也就是我们的数据填充逻辑。
  3. 在ListItem组件上设置可复用组件的ReuseId。
移动客户端开发的进阶之路:技术深度、鸿蒙生态与实战能力 广东南方网络信息科技有限公司作为立足南方的科技企业,其招聘的移动客户端开发工程师岗位职责与要求,反映了当前行业对移动端人才需求的趋势,特别是对鸿蒙生态、跨平台开发以及高性能应用的重视。对于求职者而言,深入理解岗位要求的技术点,结合自身项目经验进行针对性准备(特别是鸿蒙ArkTS/ArkUI和性能优化经验),并在面试中展现出解决问题的思路和学习能力,是成功的关键。当你在开发过程中遇到一个从未见过的技术难题(例如,一个冷门的第三方库Bug,或鸿蒙新特性的适配问题),且官方文档和社区资源有限,你会如何应对? 阅读详情

相关推荐

简单初识 Material Point Method(MPM)

简单初识 Material Point Method(MPM):先介绍了Lagrangian和Eulerian,并简单介绍了MPM Method

qq_45776432的博客 7367

OpenHarmony 3.2 Release特性更新简析

OpenHarmony 3.2 Release特性更新简析

weixin_69135651的博客 1258

LED单元板驱动(HUB75接口)

开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1.

a3748622的博客 3万+

要想用的流畅,性能怎能不优化?ArkUI性能优化

ArkUI 性能优化至关重要。通过合理的布局设计、减少不必要的组件渲染等方法,可以显著提升应用的响应速度和流畅度。本文深入探讨 ArkUI 的性能优化策略,为开发者提供实用的指导,助力打造高性能的 ArkUI 应用。

2301_79965256的博客 2285

芯片Tapeout前GDS Review | Calibre中如何切出gds中指定区域版图?

芯片Tapeout GDS Review 之Calibre中如何切出指定区域版图GDS

weixin_37584728的博客 1786

NE5532A与JRC4580在低噪声音频电路设计中的关键应用

本文深入探讨了经典运算放大器NE5532A与JRC4580在低噪声音频电路设计中的核心应用。文章从噪声模型分析入手,阐述了针对低阻抗信号源时,如何利用这两款BJT输入运放的低电流噪声特性进行优化设计。通过对比两者参数与实战守则,为设计高保真音频前级、耳机放大等电路提供了从原理图到PCB布局的完整低噪声解决方案。

weixin_29295541的博客 328

HarmonyOS学习笔记——ArkUI进阶

懒加载:提供列表数据按需加载能力,解决一次性加载长列表数据耗时长、占用过多资源的问题,可以提升页面响应速度。缓存列表项:提供屏幕可视区域外列表项长度的自定义调节能力,配合懒加载设置可缓存列表项参数,通过预加载数据提升列表滑动体验。组件复用:提供可复用组件对象的缓存资源池,通过重复使用已经创建过并缓存的组件对象,降低相同组件短时间内频繁创建和销毁的开销,提升组件渲染效率布局优化:使用扁平化布局方案,减少视图嵌套层级和组件数,避免过度绘制,提升页面渲染效率。

weixin_51323227的博客 1609

tewa-707e光猫超级密码获取方法

这款光猫很魔性,没有WIFI,没有USB接口,没有Telnet,试了很多方法去获取超级密码都不行。解密时可能会报错,可能是文件后面部分不晓得是咋拼接过来的,用AES解密时分组数据有问题。3、这个文件是用AES加密了的,直接打开是乱码,所以得用AES解密,key为16个字节的 x00。打开解出来的文件,然后搜索 telecomadmin,就可以发现超级密码了。参考资料里面的光猫不是同一款,但解密的方法基本相同的。

shaowl111的专栏 1万+

OpenHarmony实战开发-合理选择条件渲染和显隐控制。

开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发,对二者适用场景分别进行说明,实现相应适用场景的示例并给出性能对比数据。

m0_70749039的博客 2567

高通Camx功能feature分析之二:remosaic流程

本文介绍了Remosaic技术及其在图像处理中的应用。Remosaic是将4cell1像素排布还原为普通Bayer结构的过程,分为硬件和软件两种实现方式。文章详细解析了Remosaic流程,包括配流情况、Feature选择、初始化过程,以及触发拍照的完整流程。重点分析了从普通预览切换到全尺寸拍照的关键步骤:激活全尺寸RDI会话、生成请求、等待就绪、唤醒离线线程和重启预览。通过代码层面的分析,揭示了Remosaic技术如何实现高分辨率图像还原,同时说明了该过程中可能出现的预览定屏现象及其原因。

1880

EtherCAT主站SOEM -- 18 --Qt-Soem通过CSV模式(周期同步速度模式)控制一个电机转圈圈

以上就是 EtherCAT主站SOEM – 18 --Qt-Soem通过CSV模式(周期同步速度模式)控制一个电机转圈圈 的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 1212

《ArkUI实战》之渲染控制语法

ArkUI开发框架是一套构建 HarmonyOS / OpenHarmony 应用界面的声明式UI开发框架,它支持程序使用if/else条件渲染,ForEach循环渲染以及懒加载渲染。本节笔者介绍一下这三种渲染方式的使用。

m0_71263309的博客 1424

Ubuntu搭建Pytorch环境(Anaconda、Cuda、cuDNN、Pytorch、Python、Pycharm、Jupyter)

Ubuntu搭建Pytorch环境(Anconda、Cuda、Pytorch、Python、Pycharm、Jupyter)

funfan的博客 1万+

鸿蒙中级课程笔记3—ArkUI进阶5—ArkUI性能优化实践(布局性能优化)

使用更高级的布局使页面扁平化,如ReleativeContainer、Grid布局等。

BlackWolfSky的博客 375

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

鸿蒙中级课程笔记3—ArkUI进阶6—ArkUI性能优化实践(长列表加载性能优化)

使用LazyForEach懒加载这项技术后,相比ForEach这种加载方式,在列表数据量较小(100条内)且数据一次性全量加载不是性能瓶颈时,两者各项性能指标差异不大。但当列表数据较长特别是达到10000条数据量后,ForEach的上述4项性能指标会有“指数级别”的显著劣化,滑动会出现明显的卡顿,甚至会出现应用crash等现象;而LazyForEach因为采用了懒加载技术能明显减少首屏完全显示所用时间,降低应用的独占内存,提高页面滑动帧率,带来更好的性能。

BlackWolfSky的博客 890

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

鸿蒙ArkUI进阶:声明式开发到跨端实战

鸿蒙ArkUI框架进阶:声明式开发与跨端实战 本文深入解析鸿蒙ArkUI 5.0框架的核心特性和开发技巧。首先介绍声明式UI开发范式,通过状态驱动视图实现高效UI更新,对比传统命令式开发可减少30%代码量。重点讲解跨设备自适应布局方案,包括12列栅格系统、断点响应和动态资源加载。进阶部分涵盖五种状态管理方案、Flex/相对布局等高级UI技术,以及属性动画和共享元素转场等动效实现。最后通过购物车状态同步等案例,展示如何运用这些技术构建高性能、跨设备的HarmonyOS应用。

2502_93036221的博客 1080

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[HarmonyOSNext鸿蒙开发]7.ArkUI进阶:@BuilderParam装饰器的核心用法与实战解析

定位:用于装饰指向@Builder函数的变量,相当于UI元素的占位符(类似Vue的slot)解决的问题:避免自定义组件功能过度耦合,实现功能逻辑的动态注入兼容性:支持ArkTS卡片(API 9+)、元服务(API 11+)掌握@BuilderParam装饰器,意味着获得了组件动态化的金钥匙。3大核心使用模式2种作用域控制技巧5类常见问题解决方案开发者能够构建出高内聚、低耦合的鸿蒙组件体系。建议结合官方示例工程,在实践中深化对this指向、类型校验等关键概念的理解。

qq_39277137的博客 1465

鸿蒙ArkUI背景图片进阶技巧:从静态布局到交互动效全解析

本文深入解析鸿蒙ArkUI背景图片的进阶技巧,从静态布局到交互动效全流程。通过ArkTS语言实现动态响应、视差滚动和粒子分解等高级效果,特别适合电商、社交类应用的沉浸式界面开发。涵盖精准定位、智能尺寸适配、性能优化及创意交互案例,助力开发者提升用户体验。

weixin_29212429的博客 214

鸿蒙ArkUI圆角设计避坑指南:为什么你的borderRadius总是不生效?

本文深入解析鸿蒙ArkUI开发中borderRadius属性失效的常见原因与解决方案。针对组件圆角不生效的问题,从View嵌套裁剪、单位混淆、与边框阴影叠加三大核心场景剖析底层原理,并提供实战代码示例与调试技巧,帮助开发者彻底规避圆角设计陷阱,实现精准的界面效果。

weixin_29290947的博客 447

鸿蒙应用开发深度解析:ArkUI父子组件通信的八种核心模式与实践指南

/ 定义事件类型detail: {// 子组件触发@Componentbuild() {detail: {value,}))})渲染性能:组件更新速度提升40%内存占用:减少25%的冗余状态代码维护性:降低60%的耦合代码小型应用:Props + 事件回调中型应用:状态提升 + Provider模式大型应用:全局状态管理 + 事件总线随着鸿蒙ArkUI的持续演进,组件通信将更加智能化。官方状态管理库的更新新的装饰器语法提案跨设备组件通信方案。

Yue 1133

HarmonyOS ArkUI声明式UI开发实战技巧

声明式UI作为现代前端开发的核心范式,通过描述UI的最终状态而非具体操作步骤,大幅提升了开发效率与代码可维护性。其原理基于响应式编程模型,当数据状态变化时自动触发UI更新。在HarmonyOS生态中,ArkUI框架将这一理念与原生性能完美结合,特别适合开发高性能的跨设备应用。通过组件化拆分、条件渲染优化和状态管理机制,开发者可以构建出模块清晰、响应迅速的界面。本文以电商应用为例,详细解析如何运用ArkUI的@Component装饰器、@Link双向绑定等特性,实现复杂页面的高效开发,其中模块化拆分方案可减少

weixin_33801856的博客 476

OpenHarmony 进阶 UI 组件、自定义组件实战与交互开发

ArkUI 支持将重复使用的 UI 模块封装为自定义组件,遵循@Component装饰器定义,可传入参数、绑定状态,大幅简化代码。封装通用信息卡片,可在列表、首页、个人中心重复调用。// 自定义卡片组件@Component// 外部传入参数build() {// 页面入口,调用自定义组件@Entry@Componentbuild() {// 多次复用自定义卡片CardItem({ title: "功能一", desc: "OpenHarmony 分布式能力介绍" })

Helen_cai的博客 323

HarmonyOS6 粒子效果:用 ArkUI 在 HarmonyOS6 PC 上实现烟花绽放

每个粒子需要哪些属性?id: number // 唯一标识,用于后续查找和清理tx: number // translate X 偏移量ty: number // translate Y 偏移量scale: number // 缩放比例opacity: number // 透明度color: string // 颜色size: number // 尺寸tx/ty:粒子最终要飞到的位置偏移。初始都是 0(在中心点),爆发后通过极坐标计算得到一个目标偏移。scale。

qq_37048082的博客 1269

HarmonyOS应用开发实战:小事记 - NavPathStack 进阶:路由守卫、参数传递、页面返回数据

本文深入解析了 HarmonyOS Navigation 组件中 NavPathStack 的高级用法,涵盖六大核心内容:1. 基本路由操作(压栈/出栈/替换);2. 参数传递与接收;3. 页面返回数据交互;4. 路由守卫实现(拦截返回/自定义守卫);5. 路由栈状态监听;6. 常见问题解决方案。文章通过代码示例展示了关键功能实现,如携带参数跳转、监听返回数据、拦截未保存返回等场景,并提供了性能优化建议和状态管理方案,帮助开发者构建更健壮的路由系统。

b13053810049的博客 703

HarmonyOS 6.0+ PC端系统级桌面插件开发实战:ArkUI Widget进阶与系统交互深度集成

1. 核心需求梳理:基于PC端用户(尤其是开发、办公人群)对系统资源监控的核心诉求,明确插件核心功能为「实时数据采集」「多维度可视化展示」「异常状态预警」「快速操作跳转」四大模块。2. 功能边界定义:明确插件不涉及深层系统资源调控(如强制关闭进程),仅提供监控与跳转能力;支持小/中/大三种尺寸适配,不同尺寸展示不同详细程度的数据(小尺寸:核心资源概览;中尺寸:详细数据+趋势图;大尺寸:全维度数据+操作入口)。

qq_58538927的博客 1154

HarmonyOS-中级(二)

HarmonyOS中级(二),ArkTS进阶

DC_BLOG的博客 598
上一篇: 鸿蒙UIAbility组件进阶
下一篇: ArkUI-状态管理-@State、@Porp、@Link
gitzzp
博客等级 码龄11年 307粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值