之前想先给主线程减负,妄图把绘制操作也给搬到异步线程里去,可现在突然发现在Android里对于普通UI来说,也许根本就不需要异步渲染(类似于iOS的AsyncDisplayKit那种),或者说早就是全局异步渲染了。因为5.0之后已经开始默认使用ThreadedRenderer来取代之前的GL了,硬件加速的DisplayListCanvas也跟软件绘制的Canvas不太一样,因为它根本就不会执行绘制操作,而是像FragmentTransition一样保存一个记录,在记录完一套绘制流程结束之后才会扔给RenderThread来绘制,所以当我们调用drawXXX的时候,实际上主线程是不干活的,所以也就没什么负载可言了。至于TextureView和SurfaceView,这两玩意本来就是为了做高刷新用的,所以天生就给你准备了双缓冲,并不适合做静态UI展示(有两个Canvas,要画两次)。TextureView虽然可以强行单缓冲,但TextureView本身需要管理SurfaceTexture,这样会占用更多内存,用它的lockCanvas还给你返回一个非硬件加速的Canvas,所以这样一来不管从延时来看还是内存来看,效率都反而更低了。
展开
评论