OpenGL中 Canvas 性能分析
本文将通过分析部分源码,描述 Android 里面的 Canvas 的大致实现。并且会对 Canvas 的性能做一定分析,提供对 Canvas 的使用建议。 GLES20RecordingCanvas 类 这个类是什么?为什么我从没用过? 我们来看看它的代码: class GLES20RecordingCanvas extends GLES20Canvas { ... } class GLES20Canvas extends HardwareCanvas { ... } public abstract class HardwareCanvas extends Canvas { ... } 它是不暴露给开发者的,所以我们也使用不了它。 而由 extends Canvas 可见,它是 Canvas 的一个实现类,所以应当也提供和 Canvas 一样的功能。那么它在哪里被使用了呢? 它是在 Android framework 源码处的,我们可以自定义一个 view,在 debug 时,断点到 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } 就可以看到这个 canvas 的实例是 GLES21RecordingCanvas 了。 也就是说,几乎 Android 的所有 View