HarmonyOS 鸿蒙Next中LoadingProgress的CPU占用过高

HarmonyOS 鸿蒙Next中LoadingProgress的CPU占用过高 如何实现页面加载的loading效果-方舟UI框架(ArkUI)-UI框架-应用框架开发-开发 - 华为HarmonyOS开发者

模拟器上CPU占用非常高,隐藏掉LoadingProgress后占用就下来了

8 回复

开发者你好,请问下开发者这边使用的是什么版本的DevEco Studio?这边本地使用6.0.2 Beta1版本DevEco Studio和模拟器通过getCpuUsage获取CPU占用信息未出现CPU占用过高的问题,方便的话可以提供下您这边的DevEco Studio版本、模拟器版本以及您这边在使用模拟器运行LoadingProgress页面时的具体CPU占用数据吗?或者方便提供下模拟器日志吗?

模拟器日志获取方式:收集模拟器日志或者打开DevEco Studio中的设备管理器面板,选择模拟器点击箭头图标选择生成日志。

本地demo:

import { hidebug } from '@kit.PerformanceAnalysisKit';

@Entry
@Component
struct PageLoading {
  @State isLoading: boolean = true;

  aboutToAppear(): void {
    setTimeout(() => {
      this.isLoading = false;
    }, 3000);
    this.getCpuUsage();
  }

  getCpuUsage() {
    let cpuUsage: number = hidebug.getCpuUsage();
    console.log(`当前的CPU占用率为:${cpuUsage}`);
  }

  build() {
    Stack() {
      if (this.isLoading) {
        Column() {
          LoadingProgress()
            .color(Color.White)
            .width(80).height(80)

          Text('Effortlessly loading..')
            .fontSize(16)
            .fontColor(Color.White)
        }
        .width('100%')
        .height('100%')
        .backgroundColor('#40000000')
        .justifyContent(FlexAlign.Center)
      } else {
        Column(){
          Text('主页')
          Button('获取信息')
            .onClick(() => {
              this.getCpuUsage();
            })
        }
      }
    }
    .width('100%')
    .height('100%')
    .backgroundColor(Color.White)
  }
}

更多关于HarmonyOS 鸿蒙Next中LoadingProgress的CPU占用过高的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不好意思,表述错误,我是指那个模拟器本身,不是指APP。只要那个APP显示一个LoadingProgress,那个模拟器的CPU占用就会跑到50%,隐藏后占用就降到10%,是Window里那个模拟器的CPU占用。HarmonyOs 5.1.1(19)那个,

开发者你好,方便的话可以提供下您的电脑系统版本及配置信息吗?

开发者你好,初步分析此非LoadingProgress组件的影响,应用在初次启动时由于需要进行渲染CPU占用提升属于正常现象。 与开发者的电脑配置也有关系,方便的话可以提供下开发者的电脑配置信息吗? 这边后续也会对模拟器使用的最低配置进行说明。

加油👍

最简单的方法就是加载一个转圈圈的gif图,简单省事。。。

在HarmonyOS Next中,LoadingProgress组件CPU占用过高通常与频繁的UI重绘或动画循环有关。请检查是否在加载过程中执行了密集计算或阻塞了主线程。建议使用异步任务处理耗时操作,并优化动画帧率。可通过DevEco Studio的性能分析器定位具体耗时方法。

在HarmonyOS Next中,LoadingProgress组件CPU占用过高,通常是由于其动画渲染机制在模拟器环境下未能充分优化所致。这属于已知的模拟器性能差异问题,在实际真机设备上通常不会出现如此显著的CPU占用。

核心原因在于:LoadingProgress的旋转动画需要持续重绘,模拟器的图形渲染栈与真机GPU硬件加速存在差异,可能导致动画渲染落在CPU上进行软件模拟,从而引发高负载。

建议的排查与优化方向:

  1. 检查动画状态管理:确保LoadingProgress仅在需要显示时渲染,在数据加载完成后立即通过状态变量(如isLoading)控制其显隐。避免将其放置在频繁刷新的组件中。

  2. 使用条件渲染替代透明度控制:优先使用if/else条件语句或Show组件控制其存在性,而非仅通过opacitydisplay属性隐藏。彻底移除节点比保持渲染但不可见更节省资源。

  3. 评估模拟器环境:在HarmonyOS Next的模拟器中,可尝试调整模拟器的图形渲染模式(如选择"OpenGL"或"Software"模式),观察占用率变化。这有助于确认是否为模拟器特定问题。

  4. 真机验证:关键步骤是在HarmonyOS Next的真机上进行测试。真机通常具备完整的GPU硬件加速,能够高效处理此类连续动画,CPU占用率会处于正常范围。

如果上述基础检查后问题在真机上仍复现,则需要进一步分析组件的使用上下文,例如是否在频繁更新的@State变量驱动的UI区块内,导致连带不断重绘。

回到顶部