首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-03 06:42
  • 2079
  • 7406
blog.csdn.net

简介

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

  • 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对象获取(源码示例链接)

  1. @Entry
  2. @Component
  3. struct Index {
  4. @State message: string = 'getStringSync';
  5. aboutToAppear(): void {
  6. hiTraceMeter.startTrace('getStringSync', 1);
  7. // getStringSync接口的入参直接使用资源,未使用资源ID
  8. getContext().resourceManager.getStringSync($r('app.string.test'));
  9. hiTraceMeter.finishTrace('getStringSync', 1);
  10. }
  11. build() {
  12. RelativeContainer() {
  13. Text(this.message)
  14. .fontSize(50)
  15. .fontWeight(FontWeight.Bold)
  16. }
  17. .height('100%')
  18. .width('100%')
  19. }
  20. }

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

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

@Entry
@Component
struct Index {
  @State message: string = 'getStringSyncAfter';

  aboutToAppear(): void {
    hiTraceMeter.startTrace('getStringSyncAfter', 2);
    // getStringSync接口的入参使用了资源ID
    getContext().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)。

反例(源码示例链接)

  1. @CustomDialog
  2. export struct DiskFormatDialog {
  3. private diskName: string = '';
  4. build() {
  5. Column() {
  6. Text(this.diskName.split("").join("\u200B"))
  7. .textAlign(TextAlign.Start)
  8. }
  9. }
  10. }

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

正例(源码示例链接)

  1. @CustomDialog
  2. export struct DiskFormatDialog {
  3. private diskName: string = '';
  4. build() {
  5. Column() {
  6. Text(this.diskName)
  7. .textAlign(TextAlign.Start)
  8. .wordBreak(WordBreak.BREAK_ALL)
  9. }
  10. }
  11. }

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

总结

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

最后

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

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

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


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

​

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

路线图适合人群:

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

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

HarmonyOS Next 最新全套视频教程

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

​​

总结

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux42834 人正在系统学习中
鸿蒙NEXT全套学习资料
微信名片
注:本文转载自blog.csdn.net的让开,我要吃人了的文章"https://blog.csdn.net/weixin_55362248/article/details/141932027"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top