2016-05-16 6 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 раз в секунду. Поэтому, если вы нарисуете жесткий цикл, вы не превысите 60 кадров в секунду.

Если вы получаете 300 выборок в секунду, лучшим способом структурирования вашей программы является получение данных как можно быстрее и рисование текущего набора после каждого обновления экрана. Вы можете получить обратный вызов с дисплея через класс Choreographer.

+0

благодарит за ответ. Если я понял, я достиг скорости 30 кадров в секунду, потому что поток будет печатать точку в первом буфере и ничего не печатать во втором буфере, и если я хочу 60 кадров в секунду, мне нужно создать 2 холста и вызвать их один за другим ? –

+0

Нет ... см., Например, https://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics для объяснения двойной буферизации. Я не знаю, почему вы набрали 30 кадров в секунду, а не 60 кадров в секунду. Я могу гарантировать, что вы не нажмете 300 кадров в секунду, пока вы синхронизированы с дисплеем. – fadden

Смежные вопросы