HarmonyOS开发实战( Beta5.0)系统提供的接口实践规范

news/2024/9/18 6:33:51/ 标签: harmonyos, 华为, 前端, 鸿蒙, 移动开发, linux, 鸿蒙系统

简介

在应用开发中,经常会调用系统提供的接口,比如读取本地文件、处理服务端数据等等。若对接口使用不合理,可能引起延迟、卡顿、丢帧等性能问题。本文以如下系统提供的接口为例,总结了使用中的注意事项。

  • ResourceManager的getXXXSync接口
  • wordBreak属性

ResourceManager的getXXXSync接口

ResourceManager通过getXXXSync接口获取资源的方式有两种:通过resource对象resourceManager.getStringSync($r('app.string.test'))和通过idresourceManager.getStringSync($r('app.string.test').id)。 通过resource对象的方式在获取过程中发生了一次拷贝,通过id的方式只是对原对象的引用。 下面以getStringSync为例,测试一下这两种参数在方法中的使用是否会有耗时区别。

通过resource对象获取(源码示例链接)

@Entry
@Component
struct Index {@State message: string = 'getStringSync';aboutToAppear(): void {hiTraceMeter.startTrace('getStringSync', 1);// getStringSync接口的入参直接使用资源,未使用资源IDgetContext().resourceManager.getStringSync($r('app.string.test'));hiTraceMeter.finishTrace('getStringSync', 1);}build() {RelativeContainer() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.height('100%').width('100%')}
}

通过SmartPerf Host工具抓取Trace。持续时间为1.621ms。

通过id获取(源码示例链接)

@Entry
@Component
struct Index {@State message: string = 'getStringSyncAfter';aboutToAppear(): void {hiTraceMeter.startTrace('getStringSyncAfter', 2);// getStringSync接口的入参使用了资源IDgetContext().resourceManager.getStringSync($r('app.string.test').id);hiTraceMeter.finishTrace('getStringSyncAfter', 2);}build() {RelativeContainer() {Text(this.message).fontSize(50).fontWeight(FontWeight.Bold)}.height('100%').width('100%')}
}

通过SmartPerf Host工具抓取Trace。持续时间为0.124ms。

总结

参数为资源信息时(1.621ms)比参数为资源ID值时(0.124ms)耗时更多。所以当需要使用类似方法时,使用资源ID值作为参数更优。

wordBreak属性

零宽空格(Zero Width Space, ZWSP)是一个特殊的Unicode字符。它是一个不可见的字符,其宽度为零,不占用任何可见空间。在文本处理系统中,尽管它在视觉上是不可见的,但它在文本中确实存在,并可以作为潜在的断点,即允许在此位置断开行。这意味着如果一行文本过长需要自动换行时,文本可以在零宽空格的位置进行折行,而不影响单词的完整性。

虽然零宽空格在许多情况下都是有用的,但它也可能引起问题,特别是在文本处理和数据清洗中。不注意这些看不见的字符可能导致数据的意外错误、搜索失败、数据不一致等问题。因此,在处理来自不同源的文本数据时,了解和考虑这些不可见字符是非常重要的。

避免在文本组件内使用零宽空格(\u200b)的形式来设置断行规则,推荐使用wordBreak,wordBreak在使用性能方面优于零宽空格。例如推荐用法为:Text(this.diskName).wordBreak(WordBreak.BREAK_ALL)。

反例(源码示例链接)

@CustomDialog
export struct DiskFormatDialog {private diskName: string = '';build() {Column() {Text(this.diskName.split("").join("\u200B")).textAlign(TextAlign.Start)}}
}

通过SmartPerf Host工具抓取Trace。启动时ReceiveVsync阶段耗时为3s271ms。

正例(源码示例链接)

@CustomDialog
export struct DiskFormatDialog {private diskName: string = '';build() {Column() {Text(this.diskName).textAlign(TextAlign.Start).wordBreak(WordBreak.BREAK_ALL)}}
}

通过SmartPerf Host工具抓取Trace。启动时ReceiveVsync阶段耗时为301ms。

总结

使用零宽空格时(3s271ms)比使用wordBreak时(301ms)耗时更多。所以当需要使用类似方法时,使用wordBreak性能更优。

最后

小编在之前的鸿蒙系统扫盲中,有很多朋友给我留言,不同的角度的问了一些问题,我明显感觉到一点,那就是许多人参与鸿蒙开发,但是又不知道从哪里下手,因为资料太多,太杂,教授的人也多,无从选择。有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)文档用来跟着学习是非常有必要的。 

为了确保高效学习,建议规划清晰的学习路线,涵盖以下关键阶段:

GitCode - 全球开发者的开源社区,开源代码托管平台  希望这一份鸿蒙学习文档能够给大家带来帮助~


鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

2.视频学习教程+学习PDF文档

HarmonyOS Next 最新全套视频教程

  纯血版鸿蒙全套学习文档(面试、文档、全套视频等)       

​​

总结

参与鸿蒙开发,你要先认清适合你的方向,如果是想从事鸿蒙应用开发方向的话,可以参考本文的学习路径,简单来说就是:为了确保高效学习,建议规划清晰的学习路线


http://www.ppmy.cn/news/1524678.html

相关文章

“汉语新解” Prompt新高度,火爆的李继刚

“汉语新解” prompt 是由李继刚设计的一个用于启发人工智能模型进行创意性文本生成的指令模板。这个 prompt 的设计初衷是为了让AI能够以一种独特的方式解析和重新诠释常见的中文词汇,从而产生出具有深刻洞察力和幽默感的文本内容,仿佛是由鲁迅或林语堂…

2024.9.12

#1498. 换乘(transfer) 考虑建立多层图,对每个颜色都建一层图 将同一个节点之间建立权值为1的边 #1499. 游戏(game) 这是原Game with Strings 关键是考虑每个状态下的期望步数,状态计算很占空间,所以我们使用bitset优化即可 #1505. 赴京赶考…

网络安全工程师填补人才缺口

近年来,新兴技术如人工智能、5G和量子信息技术等的迅猛发展,极大地推动了互联网技术的革新。 然而,随之而来的网络安全威胁也日益增多,对国家、企业及个人安全构成了严重挑战。 网络安全问题就在我们身边,因此&#…

《C++初始化列表陷阱:谨慎前行,避免潜在风险》

一 在 C编程中,初始化列表是一个强大的工具,它允许在对象创建时直接初始化成员变量。然而,就像任何强大的工具一样,如果使用不当,初始化列表也可能会带来一些陷阱。在本文中,我们将深入探讨 C中的初始化列表…

MongoDB 的功能

MongoDB 是一个开源的、面向文档的 NoSQL 数据库管理系统,具有高性能、可扩展性和灵活的存储结构。与传统的关系型数据库不同,MongoDB 使用 JSON 类似的 BSON(Binary JSON)格式存储数据,提供了对非结构化和半结构化数据…

如何在VUE3中使用函数式组件

在Vue 3中,函数式组件的概念与Vue 2相似,但实现方式有所不同。函数式组件是一种无状态、无实例的组件,它们只根据传入的props和context来渲染输出。在Vue 3中,你可以通过定义一个函数并返回一个渲染函数来使用函数式组件。但是&am…

Rust 简介与安装

文章目录 发现宝藏1. rust简介2. rust 下载安装2.1. 安装 Rust2.2. 创建你的第一个Rust项目2.3. 探索Rust的基本概念2.4. 学习资源 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】…

GO语言快速入门(比较乱)

一、环境安装 1、安装Go环境 1、官网下载 2、cmd-->go version 3、环境变量 GOROOT:go安装路径 GOPATH:go存放代码的路径 4、GOWorks新建三个文件 5、go env查看配置 2、安装编辑器 GoLand或者VSCode 3、HelloWorld package main //一个程序只有一个…

【前端面试】标记、绘画视频的某一帧

搜寻三方库 在前端开发中,Canvas 是一个强大的工具,可以用来创建图形、动画和各种视觉效果。为了简化和增强 Canvas 的使用,社区中出现了许多库。以下是一些主流的 Canvas 库及其特性和性能对比: Fabric.js: 概述:Fabric.js 是一个基于对象的 Canvas 库,提供了丰富的 A…

828华为云征文|华为云Flexus X实例docker部署最新版禅道构建属于自己的项目管理平台

828华为云征文|华为云Flexus X实例docker部署最新版禅道构建属于自己的项目管理平台 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求…

嵌入式边缘计算:融合创新与未来展望

本文深入探讨了嵌入式边缘计算。首先解析了其概念,指出它是将计算和数据存储能力嵌入边缘设备以实现本地数据处理。阐述了其低延迟、高可靠性、节省带宽、隐私保护和高效节能等技术特点。接着介绍了关键技术,包括嵌入式系统设计、边缘计算架构、通信技术…

前端练习小项目 —— 养一只电子蜘蛛

前言:在学习完JavaScript之后,我们就可以使用JavaScript来实现一下好玩的效果了,本篇文章讲解的是如何纯使用JavaScript来实现一个网页中的电子蜘蛛。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-C…

解决虚拟机,指定的虚拟磁盘需要进行修复 打不开磁盘

指定的虚拟磁盘需要进行修复 打不开磁盘“D:\VMware\Ubuntu 64 位\Ubuntu 64 位-000011.vmdk”或它所依赖的某个快照磁盘。 这个问题可能是因为路径问题,你的vmx中乱码了 注意看这里,我的名字是Ubuntu64位,这里是乱码的 解决办法是为 定位…

nginx中如何设置gzip

前言 Nginx通过配置gzip压缩可以提升网站整体速度 Nginx的gzip功能是用于压缩HTTP响应内容的功能。当启用gzip时,在发送给客户端之前,Nginx会将响应内容压缩以减小其大小。这样可以减少数据传输的带宽消耗和响应时间,提高网站的性能和速度。…

鸿蒙开发(API 12 Beta6版)【P2P模式】 网络WLAN服务开发

概述 无线局域网(Wireless Local Area Networks,WLAN),是通过无线电、红外光信号或者其他技术发送和接收数据的局域网,用户可以通过WLAN实现结点之间无物理连接的网络通讯。常用于用户携带可移动终端的办公、公众环境…

购物车装载状态检测系统源码分享

购物车装载状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

LeetCode HOT100系列题解之数组中的第K个最大元素(7/100)

目录 题目:第K个最大元素. - 力扣(LeetCode) 题解 方法一 快速排序 方法二 桶排序 思考:各个排序的思路,以及时间复杂度是多少? 1. 冒泡排序(Bubble Sort) 2. 选择排序&#…

【Go - 拼接字符串】

在 Go 中,可以使用多种方式拼接字符串。以下是一些常见的方法: 使用 操作符 这是最简单的方式,适用于少量字符串的拼接。 str : "Hello, " "world!"使用 fmt.Sprintf 适用于需要格式化字符串的场景。 str : fmt.S…

维护左右边第一个小的值(滑动窗口)

前言&#xff1a;这个题目和我之前写的一个题目差不多&#xff0c;我们可以维护左右边第一个小的&#xff0c;然后我们就可以快速枚举 题目地址 #include <bits/stdc.h> using namespace std; #define ll long longconst int N (int)1e6 10; int a[N], h[N]; int qia…

SSM框架整合实战

本笔记基于【尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发】https://www.bilibili.com/video/BV1AP411s7D7?vd_sourcea91dafe0f846ad7bd19625e392cf76d8 总结 资料获取网址&#xff1a;https://www.wolai.com/v5Kuct5ZtPeVBk4NBUGBWF 框架…