我正在 Android 上制作自定义动画(屏幕以 60fps 闪烁),我很惊讶使用愚蠢的setInterval(() => {...}, 0)
作品比原生 android 的 Choreographer 效果更好。
即使在setInterval(() => {...}, 0)
android 5 设备上,我也有稳定的 60 FPS,但是使用 Choreographer(应该可以提高效率,下面的代码)我在 Android 9.0 上的强大 OnePlus 6 上下降到 50 FPS
android.view.Choreographer.getInstance().postFrameCallback(...);
但如果我在 Choreographer 回调定义附近写下setInterval(() => null);
- 我将实现稳定的 FPS 和低 GPU 利用率(哈哈,对吗?)。
所以我在操场上创建了应用程序,每个人都可以测试它。在“开发者选项”菜单中打开“配置 GPU 渲染”-“在屏幕上显示条形图”,并在 2 个页面上使用简单加载器启动这个简单的应用程序 - 一个具有绝对空的组件,另一个具有setInterval(() => {}, 0)
https://play.nativescript.org/?id=yRTcJk&v=1
结果 - 空组件以 58-60 FPS 的速度渲染加载程序,GPU 充分利用(最高 60FPS 线),但在具有空 setInterval 的组件中 - 稳定的 60 FPS 和 60FPS 利用率的 1/3 方式。
任何人都可以说发生了什么事吗?
UPD:添加了 GIF(第二个 - 带有setInterval(() => null);
)