HarmonyOS 鸿蒙Next List中富文本卡顿

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next List中富文本卡顿 List中,如何使用html标签的文本,直接使用富文本RichText会卡顿。

3 回复

原因是因为RichText组件比较消耗内存资源,而且有一些重复使用RichText组件的场景下,比如在List下循环重复使用RichText时,会出现卡顿、滑动响应慢等现象。

推荐使用web组件加载html资源。

嵌套list时可能遇到的问题,可以参考Web组件嵌套滚动

这里提供一个list嵌套web的demo供参考:

import web_webview from '@ohos.web.webview'

@Entry
@Component
struct SxxActiveDetailPage {
  @State articleUrl: string[] = [];
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  private scroller: Scroller = new Scroller();
  @State urls: string[] = ["<a href='https://www.xxx' target='_blank'>https://www.xxx</a>", "<a href='https://www.xxx' target='_blank'>https://www.xxx</a>"]

  build() {
    Column() {
      Column() {
        List({ scroller: this.scroller }) {
          ForEach(this.urls, (item: string) => {
            ListItem() {
              Web({ src: item, controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
                .fileAccess(true)
                .domStorageAccess(true)
                .javaScriptAccess(true)
                .imageAccess(true)//是否允许自动加载图片资源,默认允许。
                .zoomAccess(true)
                .databaseAccess(false)//设置是否开启数据库存储API权限
                .verticalScrollBarAccess(false)
                .layoutMode(WebLayoutMode.FIT_CONTENT)
            }.width('100%')
          }, (item: string) => JSON.stringify(item))
        }
        .backgroundColor(Color.White)
        .alignListItem(ListItemAlign.Start)

      }
      .alignItems(HorizontalAlign.Center)
      .justifyContent(FlexAlign.Start)
      .width('100%')
      .height('100%')
    }
  }
}

以上是初步分析结论,如有疑问可以展开回复,看到后会继续协助定位阻碍点。

开源网站上收录了UI、系统接口、Web、创新特性等场景化鸿蒙示例DEMO,开发中可以参考:https://gitee.com/scenario-samples/demo-index

更多关于HarmonyOS 鸿蒙Next List中富文本卡顿的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


RichText组件文档中已经声明:RichText组件比较消耗内存资源,在List下循环重复使用RichText时,会出现卡顿、滑动响应慢等现象。

推荐使用RichEditor组件,RichEditor支持加载普通的富文本,该组件支持属性字符串格式,不支持html格式的字符串。

需要渲染html文件,推荐用web组件,使用本地html文件,渲染返回的数据

可将web组件内嵌在list组件实现,参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-webview-V13

链接中有完整的示例代码,可以参考实现

关于web和list嵌套滑动问题可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/web-nested-scrolling-V13

web组件全量展开,需要设置renderMode:RenderMode.SYNC_RENDER。 文档:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkweb/ts-basic-components-web.md#%E6%8E%A5%E5%8F%A3

示例代码中web组件参考如下:

Web({ src: $rawfile('index.html'), controller: this.controller, renderMode: RenderMode.SYNC_RENDER })
.width(CommonConstants.WIDTH_OR_HEIGHT)
.layoutMode(WebLayoutMode.FIT_CONTENT)

针对HarmonyOS(鸿蒙)Next List中富文本卡顿的问题,这通常可能由多种因素引起,包括但不限于渲染性能、内存管理、UI线程阻塞等。以下是一些可能的解决方案方向,专注于鸿蒙系统本身而非编程语言层面:

  1. 优化富文本渲染:检查富文本的渲染逻辑,确保没有不必要的复杂计算或重复渲染。利用鸿蒙提供的UI组件优化特性,如异步加载、分页加载等,减少单次渲染的负担。

  2. 内存管理:确保应用内存使用高效,避免内存泄漏。鸿蒙系统对内存管理有严格的要求,合理管理内存可以显著提升性能。

  3. UI线程处理:确保所有UI更新都在主线程进行,同时避免在主线程执行耗时操作。使用鸿蒙提供的异步任务机制,将耗时操作移至后台线程。

  4. 资源优化:对于富文本中的图片、视频等资源,进行适当压缩和优化,减少加载时间和渲染压力。

  5. 系统更新:确保鸿蒙系统为最新版本,华为不断对系统进行优化,新版本可能已修复了相关性能问题。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部