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