【每日学点鸿蒙知识】深色模式、Webview查看版本、window设置亮度、List缓存节点更新、预编译JS

news/2025/1/7 5:05:17/
1、HarmonyOS 深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色?

深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色

  1. 正确获取到资源resourcemanager. getColorSync($r(‘app.color.test_color’).id);
  2. 深色模式canvas绘制适配onConfigurationUpdate监听并保存深色模式到Appstorage,@Watch 监听状态变量触发canvas重新绘制:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-light-dark-color-adaptation-V5

应用默认配置为跟随系统切换深浅色模式,如不希望应用跟随系统深浅色模式变化,可主动设置应用的深浅色风格。设置后,应用的深浅色模式固定,不会随系统改变。

onCreate(): void {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
}
2、HarmonyOS Webview如何查看API版本?

如何查看API版本是多少?有些文档上写着API9以下和API 9以上的用法不一样 当执行hdc shell后,getprop hw_sc.build.os.apiversion 这条命令查看API版本,提示getprop命令不可用

查看api版本的方法,进入hdc后:

param get const.ohos.apiversion
11
param get const.ohos.releasetype
Canary1
param get const.ohos.fullname
OpenHarmony-4.1.1.5

版本说明查看链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-releases-V5/overview-baseline-V5

3、HarmonyOS 使用window 的 setWindowBrightness 设置亮度后,系统亮度调节不生效?

setWindowBrightness 当前屏幕亮度规格:窗口设置屏幕亮度生效时,控制中心不可以调整系统屏幕亮度,窗口恢复默认系统亮度之后,控制中心可以调整系统屏幕亮度,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5

窗口提供管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性设置,以及对各窗口间的管理调度。该模块提供以下窗口相关的常用功能:

  • Window:当前窗口实例,窗口管理器管理的基本单元。
  • WindowStage:窗口管理器。管理各个基本窗口单元。

setWindowBrightness(brightness: number, callback: AsyncCallback<void>): void

允许应用主窗口设置屏幕亮度值,使用callback异步回调。

当前屏幕亮度规格:窗口设置屏幕亮度生效时,控制中心不可以调整系统屏幕亮度,窗口恢复默认系统亮度之后,控制中心可以调整系统屏幕亮度。

参数名类型必填说明
brightnessnumber屏幕亮度值。该参数为浮点数,取值范围为[0.0, 1.0]或-1.0。1.0表示最亮,-1.0表示默认亮度。
callbackAsyncCallback回调函数。
4、HarmonyOS List每次更新会把缓存的节点全部更新(包括屏幕不可见区域)?

List每次更新会把缓存的节点全部更新(包括屏幕不可见区域)

参考使用组件冻结特性:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/arkts-custom-components-freeze.md#navigation

定义组件冻结功能专为优化复杂UI页面的性能而设计,尤其适用于包含多个页面栈、长列表或宫格布局的场景。在这些情况下,当状态变量绑定了多个UI组件,其变化可能触发大量UI组件的刷新,进而导致界面卡顿和响应延迟。为了提升这类负载UI界面的刷新性能,开发者可以选择尝试使用自定义组件冻结功能。

组件冻结的工作原理是:

  1. 开发者通过设置freezeWhenInactive属性,即可激活组件冻结机制。
  2. 启用后,系统将仅对处于激活状态的自定义组件进行更新,这使得UI框架可以尽量缩小更新范围,仅限于用户可见范围内(激活状态)的自定义组件,从而提高复杂UI场景下的刷新效率。
  3. 当之前处于inactive状态的自定义组件重新变为active状态时,状态管理框架会对其执行必要的刷新操作,确保UI的正确展示。

简而言之,组件冻结旨在优化复杂界面下的UI刷新性能。在存在多个不可见自定义组件的情况下,如多页面栈、长列表或宫格,通过组件冻结可以实现按需刷新,即仅刷新当前可见的自定义组件,而将不可见自定义组件的刷新延迟至它们变为可见时。

需要注意,组件active/inactive并不等同于其可见性。组件冻结目前仅适用于以下场景:

  1. 页面路由:当前栈顶页面为active状态,非栈顶不可见页面为inactive状态。
  2. TabContent:只有当前显示的TabContent中的自定义组件处于active状态,其余则为inactive。
  3. LazyForEach:仅当前显示的LazyForEach中的自定义组件为active状态,而缓存节点的组件则为inactive状态。
  4. Navigation:当前显示的NavDestination中的自定义组件为active状态,而其他未显示的NavDestination组件则为inactive状态。
  5. 组件复用:进入复用池的组件为inactive状态,从复用池上树的节点为active状态。
  6. 混用场景:对于以上场景的组合使用,例如TabContent下面使用LazyForEach,切换Tab时,API version15及以下,LazyForEach中的所有节点都会被设置为active状态,而从API version16开始,只有LazyForEach的屏上节点会被设置为active状态,其余则为inactive状态。
5、HarmonyOS precompileJavaScript 问题咨询?

问题1:通过precompileWebview的controller.precompileJavaScript预编译JavaScript生成字节码缓存,是如何给businessWebview使用的? 不同web组件的字节码缓存是共享的么?

问题2:如果app本地放了上千个js文件,可全部预编译成字节码缓存,给web组件使用吗?还是只能根据url,预编译url加载时使用到的js文件?

问题3:帮忙评估下性能:如果js都在缓存有效期内,① 通过precompileWebview预编译js缓存,给businessWebview使用;②businessWebview直接加载本地的资源文件;哪种性能更好一些?

问题1:通过precompileWebview的controller.precompileJavaScript预编译JavaScript生成字节码缓存,是如何给businessWebview使用的?

首先businessWebview需要设置缓存模式。如果本地缓存的JavaScript文件匹配到业务请求的JavaScript文件对应的网络地址,就会优先使用缓存的。不同web组件的字节码缓存是共享的么?->使用了precompileJavaScript预加载过,就可以共享

问题2:不建议一次性预编译上千个js文件。建议确定业务需要前,再预编译。预编译后,在js有效期内,都是使用预编译的js文件。

需要提升页面打开速度,可以参考以下链接:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-web-develop-optimization-V5

问题3:这两个是不同用途的性能优化,具体哪个对于web加载优化的性能更好,取决于网站的加载耗时主要阻塞在js编译还是资源的加载。如果js的编译时间很长,资源很少,则使用预编译更好,反之则使用资源预缓存更好。这两个方案不是2选1的存在,可以一起使用。


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

相关文章

【Rust自学】9.3. Result枚举与可恢复的错误 Pt.2:传播错误、?运算符与链式调用

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 9.3.1. 传播错误 当你编写的函数中包含了一些可能会执行失败的调用时&#xff0c;除了在函数里处理这个错误&#xff0c;还可以把错误返回…

DC-2 靶场渗透

目录 环境搭建 开始渗透 扫存活 扫端口 扫服务 看一下80端口 看一下指纹信息 使用wpscan扫描用户名 再使用cewl生成字典 使用wpscan爆破密码 登陆 使用7744端口 查看shell rbash绕过 切换到jerry用户 添加环境变量 现在可以使用su命令了 提权 使用git提权 环…

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

Java实现UDP与TCP应用程序

三、Java实现UDP应用程序 3.1 InetAddress类 java.net.InteAddress类是用于描述IP地址和域名的一个Java类&#xff1b; 常用方法如下&#xff1a; public static InetAddress getByName(String host)&#xff1a;根据主机名获取InetAddress对象public String getHostName()…

【车载网络】BUSOFF状态简述和制造

BUSOFF Bus Off&#xff0c;即总线掉线&#xff0c;当前该节点脱离总线&#xff0c;不参与通信&#xff0c;可以理解为当前节点的Controller关闭&#xff0c;节点无法在此期间收/发报文。 注意&#xff0c;此期间ECU依然在正常运行&#xff0c;所有的任务依然被OS调度 TEC&am…

浏览器书签智能分类

浏览器书签智能分类工具 最近发现浏览器的书签越来越乱了&#xff0c;主要是因为自己太懒&#xff0c;其次之前建的分类太多又乱&#xff0c;重新手动整理确实比较烦。因此有了这个小项目。借助智谱AI的力量对书签进行重新分类。 项目简介 本工具用于自动整理浏览器书签&…

【ShuQiHere】算法的开枝散叶:从机器学习到深度学习的模型总结

【ShuQiHere】&#x1f680; 人工智能&#xff08;AI&#xff09;在过去十几年里经历了跨越式发展&#xff1a;从最初的计算机象征式推理到如今大行其道的深度学习&#xff0c;AI正逐步渗透到我们生活和工作的各个领域。然而&#xff0c;AI到底是如何一步步走到今天的&#xf…

AI数据标注师理论部分考试题库 - 500题

1.题目:职业道德是职场和行业内的特殊规范,这些规范是()在职业领域的具体实践。 A. 家庭道德 B. 社会道德 C. 仁义道德 D. 伦理道德 答案:B 解析:职业道德基于社会道德在职业场景的体现,与家庭、仁义、伦理道德概念不同,答案为 B。 2.题目:为了实现职业的健康发展,以…