提高SurfaceView Android的绘图速度

时间:2016-05-16 15:36:12

标签: java android 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);
            }
        }

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

1 个答案:

答案 0 :(得分:1)

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

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

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