1、HarmonyOS 深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色?
深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色
- 正确获取到资源resourcemanager. getColorSync($r('app.color.test_color').id);
- 深色模式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异步回调。
当前屏幕亮度规格:窗口设置屏幕亮度生效时,控制中心不可以调整系统屏幕亮度,窗口恢复默认系统亮度之后,控制中心可以调整系统屏幕亮度。
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
brightness | number | 是 | 屏幕亮度值。该参数为浮点数,取值范围为[0.0, 1.0]或-1.0。1.0表示最亮,-1.0表示默认亮度。 |
callback | AsyncCallback | 是 | 回调函数。 |
4、HarmonyOS List每次更新会把缓存的节点全部更新(包括屏幕不可见区域)?
List每次更新会把缓存的节点全部更新(包括屏幕不可见区域)
定义组件冻结功能专为优化复杂UI页面的性能而设计,尤其适用于包含多个页面栈、长列表或宫格布局的场景。在这些情况下,当状态变量绑定了多个UI组件,其变化可能触发大量UI组件的刷新,进而导致界面卡顿和响应延迟。为了提升这类负载UI界面的刷新性能,开发者可以选择尝试使用自定义组件冻结功能。
组件冻结的工作原理是:
- 开发者通过设置freezeWhenInactive属性,即可激活组件冻结机制。
- 启用后,系统将仅对处于激活状态的自定义组件进行更新,这使得UI框架可以尽量缩小更新范围,仅限于用户可见范围内(激活状态)的自定义组件,从而提高复杂UI场景下的刷新效率。
- 当之前处于inactive状态的自定义组件重新变为active状态时,状态管理框架会对其执行必要的刷新操作,确保UI的正确展示。
简而言之,组件冻结旨在优化复杂界面下的UI刷新性能。在存在多个不可见自定义组件的情况下,如多页面栈、长列表或宫格,通过组件冻结可以实现按需刷新,即仅刷新当前可见的自定义组件,而将不可见自定义组件的刷新延迟至它们变为可见时。
需要注意,组件active/inactive并不等同于其可见性。组件冻结目前仅适用于以下场景:
- 页面路由:当前栈顶页面为active状态,非栈顶不可见页面为inactive状态。
- TabContent:只有当前显示的TabContent中的自定义组件处于active状态,其余则为inactive。
- LazyForEach:仅当前显示的LazyForEach中的自定义组件为active状态,而缓存节点的组件则为inactive状态。
- Navigation:当前显示的NavDestination中的自定义组件为active状态,而其他未显示的NavDestination组件则为inactive状态。
- 组件复用:进入复用池的组件为inactive状态,从复用池上树的节点为active状态。
- 混用场景:对于以上场景的组合使用,例如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的存在,可以一起使用。