Каждый раз, когда я вызываю эти методы, требуется 14-20 мсек.
Canvas canvas = holder.lockCanvas();
holder.unlockCanvasAndPost(canvas);
Это нормальное поведение?
Стоит ли использовать другой подход?
Вот весь код
public class Render extends SurfaceView {
Context c = null;
SurfaceHolder holder;
volatile boolean running = true;
public Render(Context c) {
super(c);
this.c = c;
this.holder = getHolder();
}
public void run() {
if(running) {
if(!holder.getSurface().isValid()){
System.out.println("not valid");
return;
}
Canvas canvas = holder.lockCanvas();
holder.unlockCanvasAndPost(canvas);
}
}
}
Трассировка:
01-05 15: 49: 20.322: I / System.out (4892): время кадра: 0 мс frame291
01-05 15: 49: 20.322: I / System.out (4892): недействительно
01-05 15: 49: 20.322: I / System.out (4892): время кадра: 0 мс frame292
01-05 15: 49: 20.332: I / System.out (4892): время кадра: 2 мс frame293
01-05 15: 49: 20.357: I / System.out (4892): время кадра: 22 мс. Frame294
01-05 15: 49: 20.357: I / System.out (4892): время кадра: 1 мс frame295
01-05 15: 49: 20.362: I / System.out (4892): время кадра: 1 мс frame296
01-05 15: 49: 20.367: D / CLIPBOARD (4892): скрыть диалоговое окно буфера обмена при запуске ввода: завершено кем-то другим ...!
01-05 15: 49: 20.367: I / System.out (4892): время кадра: 8 мс frame297
01-05 15: 49: 20.377: I / System.out (4892): время кадра: 10 мс frame298
01-05 15: 49: 20.397: I / System.out (4892): время кадра: 16 мс frame299
01-05 15: 49: 20.412: I / System.out (4892): время кадра: 16 мс фрейм 300
01-05 15: 49: 20.427: I / System.out (4892): время кадра: 16 мс frame301
UPDATE
То же самое происходит, когда я использую OpenGL
package android.apps.td;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.opengl.GLSurfaceView.Renderer;
public class Render extends GLSurfaceView implements Renderer {
private final int MILLION = 1000000;
private long frame;
public Render(Context context) {
super(context);
setRenderer(this);
// TODO Auto-generated constructor stub
}
public void onDrawFrame(GL10 arg0) {
System.out.println("Frame "+(System.nanoTime()-frame)/MILLION+" ms");
frame = System.nanoTime();
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
System.out.println("Surface changed w:"+width+" h:"+height);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
System.out.println("Surface created");
}
}