每次调用这些方法,处理时间需要14-20毫秒。
这是正常的行为吗? 我应该采取不同的方法吗?
以下是整个代码:
Trace:
当我使用OpenGL时,也会发生同样的事情。
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);
}
}
}
Trace:
01-05 15:49:20.322: I/System.out(4892): 帧时间:0毫秒 帧291
01-05 15:49:20.322: I/System.out(4892): 无效的
01-05 15:49:20.322: I/System.out(4892): 帧时间:0毫秒 帧292
01-05 15:49:20.332: I/System.out(4892): 帧时间:2毫秒 帧293
01-05 15:49:20.357: I/System.out(4892): 帧时间:22毫秒 帧294
01-05 15:49:20.357: I/System.out(4892): 帧时间:1毫秒 帧295
01-05 15:49:20.362: I/System.out(4892): 帧时间:1毫秒 帧296
01-05 15:49:20.367: D/CLIPBOARD(4892): 在输入开始时隐藏剪贴板对话框:由其他人完成...!
01-05 15:49:20.367: I/System.out(4892): 帧时间:8毫秒 帧297
01-05 15:49:20.377: I/System.out(4892): 帧时间:10毫秒 帧298
01-05 15:49:20.397: I/System.out(4892): 帧时间:16毫秒 帧299
01-05 15:49:20.412: I/System.out(4892): 帧时间:16毫秒 帧300
01-05 15:49:20.427: I/System.out(4892): 帧时间:16毫秒 帧301
更新:
当我使用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");
}
}