应用程序空闲状态¶
为了提高 CPU 性能,Kanzi 在您的 Kanzi 应用程序空闲时不会重绘应用程序内容。
Kanzi 在没有输入、任务、计时器、动画,或应用程序中没有任何更新渲染的内容时暂停主循环。
当使用应用程序空闲状态时,请考虑:
如果您的 Kanzi 应用程序正在显示动画,Kanzi 默认情况下将 CPU 节流到最大 FPS。如果没有动画,Kanzi 会将应用程序设置为空闲状态。出于这个原因,为了节省 CPU 和电力,Kanzi 默认情况下将最大帧率限制为每秒 60 帧。使用应用程序配置来设置应用程序的最大帧率。
请参阅 MaximumFPS。
如果您的应用程序依赖于持续执行某些主循环任务,例如您添加到主循环
UserStage的功能,请禁用空闲状态。请参阅 ApplicationIdleState。
当您的应用程序处于空闲状态并且应用程序对渲染通道树进行更改时,Kanzi 不会触发渲染来呈现更改。要在这种情况下渲染更改,您必须通过在任何节点上调用
Node::invalidateDraw函数手动触发渲染。
如果您想在 Kanzi 应用程序中有效使用应用程序空闲状态,请记住:
任务调度程序。任务调度程序允许其他线程安排在 UI 线程中执行任务。这样,当仅在其他线程中发生更改时,您可以唤醒 UI 线程。当应用程序处于空闲状态时向任务调度程序添加任务,每个任务都会唤醒 UI 线程。如果您要优化应用程序的 CPU 性能,请仅在需要时向任务调度程序添加任务。
在主循环暂停期间,任务不会唤醒 UI 线程。这些任务会等待,Kanzi 会在主循环再次运行后的第一帧中执行所有任务。例如,在 Android 上,应用程序处于后台时主循环会暂停;在 Kanzi Android framework (droidfw) 中,没有活动的 Kanzi 视图时主循环会暂停。请参阅 在没有活动视图时提交任务。
计时器。计时器使应用程序保持唤醒状态,并影响CPU性能。每次在应用程序中触发计时器时,都会将应用程序从空闲状态唤醒。如果您在应用程序中集成了声音,请不要每帧都进行同步。例如,将应用程序设置为每100毫秒同步一次声音。
动画。正在进行的动画在运行期间会使应用程序保持唤醒状态,因为 Kanzi 必须在每一帧上应用动画值。这包括当前未更改任何值的动画,例如已到达目标值的插值。Property Target Interpolator 和 Property Target Easing Interpolator 在插值到达目标值后不再将其报告为正在进行,并在您为被插值的属性设置新值时再次报告。请参阅 插值属性值 和 使用缓动函数插值属性值。
对布局和渲染进行的更改。
当在您用来设置节点大小的属性中启用 Affect Layout 设置时,应用程序将保持唤醒状态,直到 Kanzi 完成布局的重新计算并渲染新布局。
当您用于渲染节点的属性中启用了 Affect Rendering 设置,但更改对节点大小没有影响(Affect Layout 设置被禁用)时,Kanzi 不会重新计算布局,而只是重新渲染。应用程序将保持唤醒状态,直到 Kanzi 渲染更改。
您可以在应用程序配置中设置应用程序空闲状态。请参阅 ApplicationIdleState。