HarmonyOS resourceManager获取资源文件时间过久
export function getSizeFromResource(resource: Resource): number {
const start = new Date().getTime()
console.log('---------------getSizeFromResource-------------start-----'+start);
const uiContext = GlobalContext.getContext().getObject('context') as common.UIAbilityContext
const size = uiContext.resourceManager.getNumber(resource)
const end = new Date().getTime()
console.log('---------------getSizeFromResource-------------end-----'+end);
return size
}
通过该方法获取一个float资源文件,测试的时间大概在8-10ms内。如果我需要大量获取尺寸,会影响我页面渲染速度,这里有优化空间吗?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
如何获取HSP的资源文件
2519浏览 • 1回复 待解决
如何获取资源文件的全路径
2052浏览 • 1回复 待解决
如何获取profile路径下资源文件?
1921浏览 • 1回复 待解决
HarmonyOS 获取资源文件配置字符串
236浏览 • 1回复 待解决
鸿蒙如何获取资源文件种的路径
16734浏览 • 3回复 待解决
HarmonyOS 关于获取资源文件数值的问题
162浏览 • 1回复 待解决
HarmonyOS 获取系统中图片、视频资源,如何获取媒体资源文件类型?
373浏览 • 1回复 待解决
HarmonyOS 获取资源文件的绝对路径地址
233浏览 • 1回复 待解决
HarmonyOS获取子module下的资源文件报9001001
555浏览 • 1回复 待解决
HarmonyOS 资源文件无法跨模块访问
285浏览 • 1回复 待解决
HarmonyOS 如何判断一个Resource是否获取有效资源文件
183浏览 • 1回复 待解决
资源组目录element包含多少种资源文件?
547浏览 • 1回复 待解决
HarmonyOS 如何读取Module中的资源文件?
225浏览 • 1回复 待解决
HarmonyOS 如何获取资源文件的路径,用于ndk C++侧处理
221浏览 • 1回复 待解决
HarmonyOS 项目工程中资源文件path
123浏览 • 1回复 待解决
HarmonyOS 如何读取资源文件中的strarray?
422浏览 • 1回复 待解决
HarmonyOS 加载RN沙盒路径资源文件
320浏览 • 1回复 待解决
自定义资源文件怎么读取?
2527浏览 • 1回复 待解决
ArkTS如何自定义资源文件
2426浏览 • 1回复 待解决
HarmonyOS 使用 resourceManager 获取字符串资源,如何判断该资源是否存在
188浏览 • 1回复 待解决
轻量级智能穿戴 js ,运行的时候如何获取资源文件(json格式)?
3590浏览 • 1回复 待解决
HarmonyOS 编译报错,资源文件/color/string找不到
982浏览 • 1回复 待解决
HarmonyOS Har包如何应用AppScope的资源文件?
136浏览 • 1回复 待解决
编译器突然不识别资源文件
532浏览 • 1回复 待解决
可尝试下面方式,但是应用要考虑其他问题
【问题原因】:getNumber获取单位为vp的资源时,预期返回的是单位为px的值(px值 = vp值 * density)。参数为Resource对象的接口适用于跨module访问资源的场景,其内部会调用context.createModuleContext创建对应module的context,context又会创建本module的资源管理对象,并通过该对象获取资源。但是由于createModuleContext没有给新创建的资源管理对象配置density,导致density为默认值1,使得接口返回的值是vp值。
【解决方案】:如果直接修改createModuleContext,正确配置density,会导致兼容性问题。所以方案是当API≥11,且module.json5里配置了"metadata": [ { “name”: “ContextResourceConfigLoadFromParentTemp”, “value”: “true” } ]时,createModuleContext才会给资源管理对象配置density。应用的module.json5添加这个配置项后,getNumber接口传id和传Resource获取到的px值就是相等且正确的了。
【对应用的建议】:
(1)建议在module.json5里配置ContextResourceConfigLoadFromParentTemp为true,但是要注意配置该项后,原先通过resourceManager.getNumber(resource: Resource)获取到的单位为vp的float资源的值变大了,业务要评估对功能的影响,可能需要适配一下;
(2)跨module获取资源时,比如entry获取hsp的资源,不能将参数从Resource改为id,否则会访问失败,因为传id只适用于访问本module的资源。注意:访问har包的资源不算跨包,因为har包的资源会被编到依赖方的包里,这种可以改成使用id获取资源,以提高性能;
(3)对于非跨module,且获取的资源不是单位为vp的float资源时,建议传资源id,如$r(‘app.string.xxx’).id,以提高性能;
(4)对于非跨module,且获取的资源是单位为vp的float资源时,同样建议传id来避免性能问题,但是也要注意改成id后获取到的px值会变大。