2016-05-16 103 views
0

这里是我的项目:我想打印的图形与我收到形成USB端口的数据。 我目前使用SurfaceView,但我只注意到它的30倍穿过螺纹每秒,但我想这样做快10倍提高绘图速度SurfaceView的Android

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

每次调用unlockCanvasAndPost()时间,你翻转缓冲区的,送你只画了关闭系统的图形合成器(SurfaceFlinger的)缓冲区。如果你正在绘制的点看起来闪烁,那是因为SurfaceView是双缓冲或三重缓冲。

SurfaceFlinger的不从SurfaceView不掉帧,所以如果你把他们的速度比该设备可以显示它们,缓冲队列将填补和块。每次显示刷新时都会显示一个新的缓冲区,通常每秒发生60次。所以如果你在一个紧密的循环中画,你不会超过60fps。

如果您收到每秒300个样本,一个更好的方式来构建程序是每个屏幕刷新后尽可能快地接收数据,并绘制当前设置。您可以通过Choreographer课程从显示屏获得回叫。

+0

感谢您的回答。 如果我的理解,我达到了每秒30帧的速度,因为该线程将在第一缓冲区和打印没有在第二缓冲打印点,如果我想每秒60帧我要创建2个帆布,并呼吁他们相继 ? –

+0

否...参见例如https://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics了解双缓冲的解释。我不知道你为什么打到30fps而不是60fps。我可以保证你在同步到显示器时不会达到300fps。 – fadden