HarmonyOS 应用分帧的通用方法?

如题:HarmonyOS 应用分帧的通用方法?

阅读 505
1 个回答

思路:将应用界面分成若干段(利用if或利用滚动容器的数据源),利用displaysync监听vsync,在vsync的回调中逐步填充应用内容

非滚动场景:

import displaySync from '@ohos.graphics.displaySync';

@Entry
@Component
struct Index {
  @State stages:number = 0;
  myDisplaySync:displaySync.DisplaySync = displaySync.create();

  updateStage() {
    if (this.stages == 0) {
      this.myDisplaySync.start();
      this.myDisplaySync.on("frame", (frameInfo: displaySync.IntervalInfo)=> {
        this.updateStage();
      });
    }
    this.stages += + 1;
    if (this.stages == 3) {
      this.myDisplaySync.stop()
    }
  }

  build() {
    Column() {
      if (this.stages > 0) {
        Text("first part")
      }
      if (this.stages > 1) {
        Text("second part")
      }
      if (this.stages > 2) {
        Text("third part")
      }
    }
    .width('100%')
  }

  aboutToAppear(): void {
    this.updateStage()
  }
}

滚动场景

和上面类似的思路,滚动容器要更简单一些,因为数据天然就是分段的,可以直接控制容器里的数据数量:

如果是lazyforeach,可以修改他的数据源中的getTotalCount回调函数,初始返回少量数据,逐步放开

如果是foreach,只能修改数据源数组中的数据数量

和上面的用法一样,都是用displaysync逐帧放开数据