会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 处理HarmonyOS使用中Image组件白块问题的有用计划!

处理HarmonyOS使用中Image组件白块问题的有用计划

时间:2025-05-21 13:21:30 来源:锐评时讯 作者:最新热点 阅读:321次

概述。

在。HarmonyOS。运用开发进程中,经过Image组件加载。网络。图片时,一般会阅历四个要害阶段:组件创立、图片资源。下载。、图片解码和改写。当加载的图片资源过大时,Image组件会等候图片数据下载和解码完结后才改写显现。因为图片下载进程耗时较长,在图片彻底加载之前,页面往往会显现空白区域或占位图(一般为白色或淡色布景),这种现象被称为“Image 白块”。“Image 白块”不只影响视觉作用,还会下降用户体会,因而在开发中应尽量防止这种状况。

图1 Image白块问题作用图。

为了削减图片加载时呈现的白块问题,开发者。能够选用预下载和缓存机制。具体来说,能够在组件创立之前,经过网络恳求将图片下载并解码,然后将图片数据缓存到运用沙箱中。当Image组件加载时,首要检查运用沙箱中是否存在该图片的缓存数据。假如缓存存在,则直接从缓存中读取图片,防止重复下载;假如缓存不存在,再进行网络恳求并下载图片。经过这种方法,能够有用削减加载大尺度网络图片时的白屏或白块现象,缩短加载时刻,然后提高用户体会。

图2 Image加载网络图片两种方法比照。

场景事例。

在运用Navigation组件时,开发者一般会在主页引进子页面组件,并经过按钮点击完结页面跳转。假如子页面需求加载较大的网络图片,且未设置占位图,则跳转后可能会呈现长时刻的白块现象。为了处理这一问题,能够在父页面提早下载图片并缓存到本地。当子页面加载时,直接从缓存中读取图片数据,然后削减白块显现时刻,提高用户体会。

本文将以运用沙箱提早缓存举例,给出削减Image白块呈现时长的一种优化计划。

优化前:运用Image组件直接加载网络地址。

以下为部分示例代码:

NavDes。ti。nation() {  Row() {    // 不。引荐。用法:运用Image直接加载网络图片的方法,遭到图片下载与解析的耗时影响,极易呈现白块。    Image("https://www.example.com/xxx.png") // 此处请填写一个具体的网络图片地址。      .objec。tF。it(ImageFit.Auto)      .width('100%')      .height('100%')  }  .width('100%')  .height('100%')  .justifyCon。te。nt(FlexAlign.Center)}.title(this.name)。
优化后:子页面PageOne中需展现一张较大的网络图片,在父组件的aboutToAppear()中提早建议网络恳求,并做判别文件是否存在,已下载的不再重复恳求,存储在运用沙箱中。当父页面点击按钮跳转子页面PageOne,此刻触发。pi。xMap恳求读取运用沙箱中已缓存解码的网络图片并存储在LocalSt。or。age中,经过在子页面的Image中传入被StorageLink润饰的变量Imag。eDa。ta进行数据改写,图片送显。

图3 运用预下载的方法,由开发者灵敏地处理网络图片,削减白块呈现时长。

以下为要害示例代码:

1.在父组件里aboutToAppear()中提早建议网络恳求,当父页面点击按钮跳转子页面PageOne,此刻触发pixMap恳求读取运用沙箱中已缓存解码的网络图片并存储在localStorage中。非初次点击时,不再重复调用getPixMap(),防止每次点击都从沙箱里读取文件。

aboutToAppear(): void {  httpRequest(); // 在父组件提早建议网络恳求}build() {  Navigation(this.childNavSt。ac。k) {    Column() {      Button('push Path to pageOne', { stateEffect: true, type: ButtonType.Capsule })        .width('80%')        .height(40)        .margin({ bottom: '36vp' })        .onClick(() =>{          if (!localStorage.get('imageData')) { // 非初次点击,不再重复调用getPixMap(),防止每次点击都从沙箱里读取文件。            this.getPixMap();          }          this.childNavStack.pushPath({ name: 'pageOne' });        })    }    .width('100%')    .height('100%')    .justifyContent(FlexAlign.End)  }  .backgroun。dC。olor(Color.Transparent)  .title('ParentNavigation')}。
2.在NetRequest.ets中界说网络恳求httpRequest(),经过fs.access()检查文件是否存在,当文件存在时不再重复恳求,并写入沙箱中。
export async function httpRequest() {  fs.access(fileUrl, fs.AccessModeType.RE。AD。).then((res) =>{ // 检查文件是否存在    if (!res) { // 如沙箱里不存在地址,从头恳求网络图片资源      http.createHttp()        .request('https://www.example.com/xxx.png', // 此处请填写一个具体的网络图片地址。          (error: BusinessError, data: http.HttpResponse) =>{            if (error) {              // 下载失利时不履行后续逻辑              return;            }            // 处理网络恳求回来的数据            if (http.ResponseCode.OK === data.responseCode) {              const imageData: ArrayBuffer = data.result as ArrayBuffer;              // 保存图片到运用沙箱              readWriteFileWithStream(imageData);            }          }        )    }  })}。
3.在子组件中经过在子页面的Image中传入被StorageLink润饰的变量ImageData进行数据改写,图片送显。
build() {  NavDestination() {    Row() {      Image(this.imageData) // 正例:此刻Image拿到已提早加载好的网络图片,削减了白块呈现时长        .objectFit(ImageFit.Auto)        .width('100%')        .height('100%')    }    .width('100%')    .height('100%')    .justifyContent(FlexAlign.Center)  }  .title(this.name)}。

功能比照剖析。

1、trace剖析。

下面,运用trace对优化前后功能进行比照剖析。

优化前检查trace数据,剖析阶段的起点为父页面点击按钮开端计时即trace的H:DispatchTouchEvent,完毕点为子页面图片烘托的首帧呈现即H:CreateImagePixelMap。标签。后的第一个Vsync,记载白块呈现时刻为1.3s,其间以H:HttpRequestInner的标签开端为起点到H:Downlo。adI。mageSuccess标签完毕为结尾记载时刻,即为网络下载耗时1.2s,因而运用Image直接加载网络图片时,呈现长时刻Image白块,其原因是需求等候网络下载资源完结。

图4 直接运用Image加载网络数据。

优化后检查trace数据,剖析阶段的起点为父页面点击按钮开端计时即trace的H:DispatchTouchEvent,完毕点为子页面图片烘托的首帧呈现即H:CreateImagePixelMap标签后的第一个Vsync,记载白块呈现时刻为32.6ms,其间记载H:HttpRequestInner的标签耗时即为提早网络下载的耗时1.16s,比照白块时长可知提早预下载能够削减白块呈现时长。

图5 运用预下载的方法。

阐明:网络下载耗时实践遭到网络动摇影响,优化前后的网络下载耗时数据整体差异在1s内,供给的功能数值仅供参阅。

2、作用比照。

优化前直接运用Image加载网络数据,未运用预下载。优化后运用预下载。

3、数据比照。

比照数据如下:

计划。白块呈现时长(毫秒)。白块呈现时长。
(优化前)直接运用Image加载网络数据,未运用预下载。1300。图片方位白块呈现时刻较长。
(优化后)运用预下载。32.6。图片方位白块呈现时刻较短。

阐明:测试数据仅限于示例程序,不同设备特性和具体运用场景的多样性,所取得的功能数据存在差异,供给的数值仅供参阅。

由此可见,加载网络图片时,运用预下载,提早处理网络恳求并从运用沙箱中读取缓存数据的方法,能够削减用户可见Image白屏或白块呈现时长,提高用户体会。

更具体内容请参阅:https://developer.huawei.com/consumer/cn/doc/best-pract。ic。es-V5/bpta-image-white-lump-solution-V5。

内容来源:https://fastrans.nhobethoi.com/app-1/lộ gan mb,http://chatbotjud.saude.mg.gov.br/app-1/horario-pagante-tigre

(责任编辑:咨询)

    系统发生错误

    系统发生错误

    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

    [ 错误信息 ]

    页面发生异常错误,系统设置开启调试模式后,刷新本页查看具体错误!