Window.FrameMetricsListener接口探究

        Window.FrameMetricsListener是android 在API 24时添加的新功能,可以给相应的window设置,获得该 window每一帧的渲染时长数据,通过这个回调可以监控页面的性能。并且与Choreographer.FrameCallback相比,FrameMetricsListener不会在每一次收到垂直同步信号都把时长打印出来,只有在画面发生变化时才会记录,那么这一点是如何实现的呢?
        首先是入口Window.addOnFrameMetricsAvailableListener
        Window.FrameMetricsListener接口探究_第1张图片
        从代码可以看出最后是给window的decorView添加了相应的FrameMetricsListener,这个回调被设置在View的代码里,并且往下目前没有看到覆写这个方法的View。
        attachinfo是View与window绑定相关的数据,如果View已经有了attachinfo,则说明已经和Windown关联上了,除了在mFrameMetricsObservers中加了该监听器,另外从代码中可以看到如果没有renderThread则不会进行帧数据的检测;如果没有attachinfo,则说明还没有和Window关联上,只在mFrameMetricsObservers中添加监听器,会在View与Window关联时(registerPendingFrameMetricsObservers方法)中注册到renderThread中。

Window.FrameMetricsListener接口探究_第2张图片

        从堆栈信息可以看到,在ViewGroup调用addView时会注册FrameMetricsListener,因此任何时候只要把FrameMetricsListener添加到Windwow里,只要触发了addView都可以注册上。

      Window.FrameMetricsListener接口探究_第3张图片
        并且除了对WIndow设置FrameMetricsListener之外,也可以对View进行单独设置,是否说明可以单独统计每一个View的耗时?接下来如有时间会对这一点进行研究。目前来看View的addOnFrameMetricsAvailableListener方法被设置为了@hide,也就是在studio开发过程中获取不到。

你可能感兴趣的:(Window.FrameMetricsListener接口探究)