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
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

可尝试下面方式,但是应用要考虑其他问题

【问题原因】: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值会变大。

分享
微博
QQ
微信
回复
1天前
相关问题
如何获取HSP的资源文件
2519浏览 • 1回复 待解决
如何获取资源文件的全路径
2052浏览 • 1回复 待解决
如何获取profile路径下资源文件
1921浏览 • 1回复 待解决
HarmonyOS 获取资源文件配置字符串
236浏览 • 1回复 待解决
鸿蒙如何获取资源文件种的路径
16734浏览 • 3回复 待解决
HarmonyOS 资源文件无法跨模块访问
285浏览 • 1回复 待解决
HarmonyOS 项目工程中资源文件path
123浏览 • 1回复 待解决
HarmonyOS 加载RN沙盒路径资源文件
320浏览 • 1回复 待解决
自定义资源文件怎么读取?
2527浏览 • 1回复 待解决
ArkTS如何自定义资源文件
2426浏览 • 1回复 待解决
编译器突然不识别资源文件
532浏览 • 1回复 待解决