提高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次。因此,如果你画一个紧凑的循环,你不会超过每秒60帧。

如果你每秒接收300个样本,那么构建程序的更好方法是尽快接收数据,并在每次屏幕刷新后绘制当前集。您可以通过Choreographer类从显示器获取回调。

最新更新