一个面试题----android端流畅度除了滑动的时候统计fps外,静止的情况怎么统计?

最近面试的时候问到了一个小题目,关于android端流畅度的测量方法。我的回答是通过获取gfxinfo信息,然后计算一个单位时间内绘制的帧数,从而计算出fps的值。同时为了衡量稳定性,我通过对比测试方差的方式,衡量滑动的流畅度稳定性,最后,基于adb做成自动滑动、获取数据的脚本。

但是面试官又问了另外一个问题—-关于静置的画面怎么衡量呢?如果用的是旧方法,那么静止的画面fps应该会变成0,那样岂不是说非常不流畅?这当然不是,因为fps的弊端是计算1s内绘制了多少帧,如果静止了,从数值来看就变得非常小,从而导致数据的不准。

那么怎么办呢?,搜了下资源,参考了这篇文章:https://www.jianshu.com/p/6a680186b95f

嗯,大概意思是这样的,android提供了这样一个类:
Choreographer,这个类有一个回调接口FrameCallback,于是就变成:

Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
    @Override
    public void doFrame(long frameTimeNanos) {
        /**
         * frameTimeNanos就是实际绘制的时间,如果掉帧了,那么回调的间隔就是实际绘制的时间;
         * 如果画面静置了,没有滑动操作,那么回调的时间就是VsyncTime,这样计算出来的流畅度就是60了
         */
    }
});

嗯,这样问题就解决了,当然有没有缺点呢,只能android里面用,比如腾讯的GT工具用的就是这样一种原理,取名为SM。而之前封装的计算是基于python的,也就是gfxinfo的方式更通用,毕竟后者只是解析一个文件和时间做计算,各有各的好吧!

你可能感兴趣的:(一个面试题----android端流畅度除了滑动的时候统计fps外,静止的情况怎么统计?)