HarmonyOS鸿蒙Next中使用List时,数量大于页面数量会无限打印导致程序崩溃

HarmonyOS鸿蒙Next中使用List时,数量大于页面数量会无限打印导致程序崩溃 使用List的时候,数量大于页面数量,会无限打印,然后程序崩溃。从网络请求回来后,List使用懒加载LazyForEach的方式。当列表数量大于手机页面的大小时,系统会无限刷日志。

[nodict][txt_paragraph.cpp(~TxtParagraph)-(100000:100000:scope)] destroy TxtParagraph with placehold

然后程序崩溃。

附上日志:无限打印
附上核心代码:List代码

3 回复

是因为使用lazyforeach时,生成的键值没有管理好导致的,参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/arkts-rendering-control-foreach-V13#%E9%94%AE%E5%80%BC%E7%94%9F%E6%88%90%E8%A7%84%E5%88%99

例如这边使得键值唯一,加了个Math.random,就正常了:

@Builder
private getListView() {
  List() {
    LazyForEach(this.deviceList, (item: DeviceBean) => {
      ListItem() {
        DeviceListCardView({ deviceItem: item })
          .onClick(() => {
            //this.gotoLive(item)
          })
          .reuseId('article' + Math.random())
      }
    }, (item: DeviceBean) => item.device_id + Math.random())
  }
  .cachedCount(10)
  .width('100%')
  .edgeEffect(EdgeEffect.None)
  .padding({ left: '10vp', right: '10vp' })
}

更多关于HarmonyOS鸿蒙Next中使用List时,数量大于页面数量会无限打印导致程序崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中使用List时,如果数量大于页面数量导致无限打印并引发程序崩溃,可能是由于List组件的渲染机制或数据加载逻辑存在问题。List组件在处理大量数据时,如果未正确控制数据加载和渲染,可能会导致内存溢出或无限循环,进而导致程序崩溃。

具体原因可能包括:

  1. 数据加载未分页:List组件在加载数据时,如果未进行分页处理,可能会导致一次性加载过多数据,超出内存限制。

  2. 渲染机制问题:List组件在渲染时,如果未正确处理数据的更新或重绘,可能会导致无限循环或重复渲染,进而引发崩溃。

  3. 事件处理不当:例如,ListItem的点击事件未正确处理,可能导致重复触发数据加载或渲染逻辑。

解决方案可能包括:

  1. 分页加载数据:通过分页加载数据,避免一次性加载过多数据,减少内存压力。

  2. 优化渲染逻辑:确保List组件的渲染逻辑正确,避免重复渲染或无限循环。

  3. 事件处理优化:确保ListItem的事件处理逻辑正确,避免重复触发数据加载或渲染。

在HarmonyOS鸿蒙Next中使用List组件时,如果数据量超过页面显示范围,通常应启用分页或滚动加载机制,避免一次性加载所有数据。无限打印和程序崩溃可能是由于未正确处理数据加载逻辑,导致内存溢出或死循环。建议检查List的数据源和渲染逻辑,确保数据分批加载,并使用LazyForEachif条件渲染来优化性能。同时,监控内存使用,避免资源耗尽。

回到顶部