kan*_*eda 8 android surfaceview android-canvas
我正在实现一个SurfaceView子类,我在其中运行一个单独的线程来绘制到SurfaceHolders Canvas上.我正在测量呼叫之前和之后的时间lockCanvas()
,我从大约70ms到100ms.有没有人能指出我为什么会得到如此高的时间?这里是代码的相关部分:
public class TestView extends SurfaceView implements SurfaceHolder.Callback {
....
boolean created;
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
mThread = new DrawingThread(mHolder, true);
mThread.onWindowResize(width, height);
mThread.start();
}
public void surfaceCreated(SurfaceHolder holder) {
created = true;
}
public void surfaceDestroyed(SurfaceHolder holder) {
created = false;
}
class DrawingThread extends Thread {
public void run() {
while(created) {
Canvas canvas = null;
try {
long t0 = System.currentTimeMillis();
canvas = holder.lockCanvas(null);
long t1 = System.currentTimeMillis();
Log.i(TAG, "Timing: " + ( t1 - t0) );
} finally {
holder.unlockCanvasAndPost(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
每次更改曲面时都在创建线程。您应该启动线程surfaceCreated
并在中杀死它surfaceDestroyed
。surfaceChanged
用于表面尺寸更改时。
从SurfaceView。surfaceCreated文档:
首次创建表面后立即调用此方法。此实现应启动所需的任何呈现代码。请注意,只有一个线程可以绘制到Surface中,因此,如果正常渲染将在另一个线程中,则不应在此处绘制Surface。
多线程可能使您受阻。从SurfaceHolder。lockCanvas文档:
如果在Surface未准备好时(在Callback.surfaceCreated之前或Callback.surfaceDestroyed之后)重复调用此方法,则会将调用限制为较慢的速率,以避免消耗CPU。
但是,我不认为这是唯一的问题。surfaceChanged
实际是否被多次调用?
归档时间: |
|
查看次数: |
4110 次 |
最近记录: |