当前位置: 首页 > news >正文

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

简介

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

  • 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 最新全套视频教程

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

​​

总结

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从知识视角理解软件开发
  • 2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解
  • 【2024数模国赛赛题思路公开】国赛B题第二套思路丨附可运行代码丨无偿自提
  • 4000字三合一!Stata、SPSS、MATLAB实现多元线性回归详解!
  • 高等代数精解【9】
  • flutter开发多端平台应用的探索 上(基本操作)
  • 监理工程师职业资格考试
  • 如何在Mac电脑上本地部署Stable Diffusion:详细教程(webUI)
  • 基于SVM的手势识别,SVM工具箱详解,SVM工具箱使用注意事项
  • nnunetv2(一)配置文件和nnUNetv2_convert_MSD_dataset命令
  • JZ62 孩子们的游戏(圆圈中最后剩下的数)
  • 【Hadoop|HDFS篇】HDFS概述
  • 微信小程序知识点(二)
  • Meaven的安装
  • [机器学习]线性回归算法
  • JS 中的深拷贝与浅拷贝
  • Hibernate最全面试题
  • HomeBrew常规使用教程
  • JavaScript的使用你知道几种?(上)
  • Java的Interrupt与线程中断
  • JSONP原理
  • JS专题之继承
  • opencv python Meanshift 和 Camshift
  • python大佬养成计划----difflib模块
  • vue中实现单选
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 复杂数据处理
  • 后端_ThinkPHP5
  • 解析 Webpack中import、require、按需加载的执行过程
  • 如何使用 JavaScript 解析 URL
  • 算法-插入排序
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 责任链模式的两种实现
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • mysql面试题分组并合并列
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​ubuntu下安装kvm虚拟机
  • ​浅谈 Linux 中的 core dump 分析方法
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • #QT 笔记一
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $().each和$.each的区别
  • $(function(){})与(function($){....})(jQuery)的区别
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • .chm格式文件如何阅读
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core中如何集成RabbitMQ
  • .NET 常见的偏门问题