2016-05-16 102 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