Android Choreographer 监控应用 FPS

Choreographer 是 Android 提供的一个强大的工具类,用于协调动画、绘制和视图更新的时间。它的主要作用是协调应用的绘制过程,以确保流畅的用户体验。Choreographer 也可以帮助我们获取帧时间信息,从而为性能监测和优化提供重要的数据支持。

在 Android 开发中,FPS (Frames Per Second) 是衡量应用流畅度的重要指标。监控和优化 FPS 可以显著提升用户体验


我们市面上的手机一般是有 60 FPS 的,或者是 120 FPS 的,意思就是手机界面一秒刷新 60 次或者 120 次,我们就可以计算他们的时间间隔:

时间间隔 = 1秒 / FPS

根据这个公式,我们可以得到:

FPS = 1秒 / 时间间隔


Kotlin 复制代码
object FPSMonitor {
    private val TAG = FPSMonitor::class.java.simpleName
    private var lastFrameTimeNanos = 0L

    private val frameCallback = object : Choreographer.FrameCallback {
        // doFrame 函数会在每次 VSync 信号触发时执行
        override fun doFrame(frameTimeNanos: Long) { // frameTimeNanos 单位是纳秒
            if (lastFrameTimeNanos != 0L) {
                val timeDiff = frameTimeNanos - lastFrameTimeNanos
                val fps = 1000000000 / timeDiff  // 1 秒 = 1000000000 纳秒
                Log.d(TAG, "Current FPS: $fps")
            }
            lastFrameTimeNanos = frameTimeNanos
            Choreographer.getInstance().postFrameCallback(this)
        }
    }

    fun start() {
        Choreographer.getInstance().postFrameCallback(frameCallback)
    }

    fun stop() {
        Choreographer.getInstance().removeFrameCallback(frameCallback)
    }
}

使用方法也很简单,调用 start() 函数后查看日志就能看到一直在打印 FPS 的数据:

这样子通过 Choreographer 就能实时监控应用的 FPS,查看做一些操作后有没有掉帧(比如主线程做了耗时操作、内存抖动等),再针对具体的业务逻辑操作去进行优化


优化 FPS 掉帧问题需要结合具体情况对症下药,从减少主线程的负载到优化视图层次结构、管理内存和资源等方面进行全面考虑和操作。通过合理使用性能分析工具,可以更准确地定位问题并采取有效的措施。

相关推荐
峥嵘life9 小时前
五一南昌第三天游玩记录:梅景寻芳,母校忆旧,摩天轮揽夜
android
UXbot10 小时前
AI画原型工具如何帮非设计师快速生成UI界面
前端·vue.js·ui·kotlin·swift·原型模式·web app
qq_4523962310 小时前
第三篇:《JMeter断言:验证接口响应正确性》
android·jmeter
aqi0011 小时前
一文速览 HarmonyOS 6.0.1 引入的十个新特性
android·华为·harmonyos·鸿蒙·harmony
橙子1991101612 小时前
Android 第三方框架 相关
android
赏金术士12 小时前
JetPack Compose 弹窗、菜单、交互组件(五)
android·kotlin·交互·android jetpack·compose
小书房12 小时前
Kotlin的协程
kotlin·高并发·协程·异步·虚拟线程·coroutinescope
海天鹰13 小时前
高版本安卓老应用下面空白
android
猫的玖月13 小时前
(七)函数
android·数据库·sql