提高 SurfaceView 的绘图速度

Increase drawing speed of SurfaceView

这是我的项目:我想用从 USB 端口接收到的数据打印图形。

我目前正在使用 SurfaceView,但我只是注意到它每秒将通过线程 30 次,但我想快 10 倍。

public void run() {
    while (isItOK) {
        if (!holder.getSurface().isValid()) {
            continue;
        }
        Canvas c = holder.lockCanvas();
        c.drawPoint(pos, 50, p);
        holder.unlockCanvasAndPost(c);
    }
}

有没有办法提高速度,或者我必须使用 GLSurfaceView 或其他方式?

每次调用 unlockCanvasAndPost() 时,您都在翻转缓冲区,将刚刚提取的缓冲区发送到系统图形合成器 (SurfaceFlinger)。如果您绘制的点似乎在闪烁,那是因为 SurfaceView 是双缓冲或三缓冲的。

SurfaceFlinger 不会从 SurfaceView 丢帧,因此如果您发送它们的速度快于设备可以显示它们的速度,缓冲区队列将填满并阻塞。每次显示刷新都会显示一个新缓冲区,通常每秒发生 60 次。所以如果你画一个紧密的循环,你不会超过60fps。

如果您每秒接收 300 个样本,构建程序的更好方法是尽快接收数据,并在每次屏幕刷新后绘制当前集。您可以通过 Choreographer class.

从显示中获取回调