• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Class (FrameCallback)
2
3用于设置下一帧渲染时需要执行的任务。
4
5> **说明:**
6>
7> - 本模块首批接口从API version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 本Class首批接口从API version 12开始支持。
10>
11> - 以下API需要配合[UIContext](arkts-apis-uicontext-uicontext.md)中的[postFrameCallback](arkts-apis-uicontext-uicontext.md#postframecallback12)和[postDelayedFrameCallback](arkts-apis-uicontext-uicontext.md#postdelayedframecallback12)使用。开发者需要继承该类并重写[onFrame](#onframe12)或[onIdle](#onidle12)方法,实现具体的业务逻辑。
12
13## onFrame<sup>12+</sup>
14
15onFrame(frameTimeInNano: number): void
16
17在下一帧进行渲染时,该方法将被执行。
18
19**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
20
21**系统能力:** SystemCapability.ArkUI.ArkUI.Full
22
23**参数:**
24
25| 参数名  | 类型                                                 | 必填 | 说明                                                    |
26| ------- | ---------------------------------------------------- | ---- | ------------------------------------------------------- |
27| frameTimeInNano | number | 是   | 下一帧渲染开始执行的时间,以纳秒为单位。<br/>取值范围:[0, +∞) |
28
29**示例:**
30
31```ts
32import { FrameCallback } from '@kit.ArkUI';
33
34class MyFrameCallback extends FrameCallback {
35  private tag: string;
36
37  constructor(tag: string) {
38    super();
39    this.tag = tag;
40  }
41
42  onFrame(frameTimeNanos: number) {
43    console.info('MyFrameCallback ' + this.tag + ' ' + frameTimeNanos.toString());
44  }
45}
46
47@Entry
48@Component
49struct Index {
50  build() {
51    Row() {
52      Column() {
53        Button('点击触发postFrameCallback')
54          .onClick(() => {
55            this.getUIContext().postFrameCallback(new MyFrameCallback("normTask"));
56          })
57        Button('点击触发postDelayedFrameCallback')
58          .onClick(() => {
59            this.getUIContext().postDelayedFrameCallback(new MyFrameCallback("delayTask"), 5);
60          })
61      }
62      .width('100%')
63    }
64    .height('100%')
65  }
66}
67```
68
69## onIdle<sup>12+</sup>
70
71onIdle(timeLeftInNano: number): void
72
73在下一帧渲染结束时,如果距离下一个Vsync信号到来还有1ms以上的剩余时间,该方法将被执行,否则将顺延至后面的帧。
74
75**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
76
77**系统能力:** SystemCapability.ArkUI.ArkUI.Full
78
79**参数:**
80
81| 参数名  | 类型                                                 | 必填 | 说明                                                    |
82| ------- | ---------------------------------------------------- | ---- | ------------------------------------------------------- |
83| timeLeftInNano | number | 是   | 这一帧剩余的空闲时间,以纳秒为单位。<br/>取值范围:[0, +∞) |
84
85**示例:**
86
87```ts
88import { FrameCallback } from '@ohos.arkui.UIContext';
89
90class MyIdleCallback extends FrameCallback {
91  private tag: string;
92
93  constructor(tag: string) {
94    super();
95    this.tag = tag;
96  }
97
98  onIdle(timeLeftInNano: number) {
99    console.info('MyIdleCallback ' + this.tag + ' ' + timeLeftInNano.toString());
100  }
101}
102
103@Entry
104@Component
105struct Index {
106  build() {
107    Row() {
108      Column() {
109        Button('点击触发postFrameCallback')
110          .onClick(() => {
111            this.getUIContext().postFrameCallback(new MyIdleCallback("normTask"));
112          })
113        Button('点击触发postDelayedFrameCallback')
114          .onClick(() => {
115            this.getUIContext().postDelayedFrameCallback(new MyIdleCallback("delayTask"), 5);
116          })
117      }
118      .width('100%')
119    }
120    .height('100%')
121  }
122}
123```
124