1
当测试的几款游戏在Android 4.0的标准游戏线程它工作得很好,直到活动被关闭(按home键等),使活动与一个空指针的应用程序崩溃。线程崩溃
这甚至发生在样品LunarLander,谷歌编程。
的问题是,帆布离开活动,使应用程序崩溃时变为零。
从logcat的错误消息是仅低于。
02-27 18:07:58.974: V/MainThread(2667): CANVAS [email protected]
02-27 18:07:59.164: V/MainThread(2667): CANVAS null
02-27 18:07:59.164: W/dalvikvm(2667): threadid=14: thread exiting with uncaught exception (group=0x409c01f8)
02-27 18:07:59.174: E/AndroidRuntime(2667): FATAL EXCEPTION: Thread-108
02-27 18:07:59.174: E/AndroidRuntime(2667): java.lang.NullPointerException
02-27 18:07:59.174: E/AndroidRuntime(2667): at com.joakimengstrom.pong.MainThread.run(MainThread.java:49)
这是启动线程时的代码,其中Log.v如上所示。
while(this.running){
canvas = null;
try {
canvas = this.surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
Log.v(TAG, "CANVAS " + canvas);
canvas.drawColor(Color.BLACK);
...
而下面是当创建线程和关闭它时,表面被破坏。
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread = new MainThread(getHolder());
thread.setRunning(true);
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
thread.setRunning(false);
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
如何在不使画布为空的情况下以安全方式退出线程?
你是怎么知道在Android 4.0中SurfaceHolder.lockCanvas被更改以便返回null的?我没有看到它记录在Android开发者网站上的任何地方。 – 2012-03-21 19:07:42
完全相同的问题在这里,也想知道你是如何发现“在Android 4.0中,SurfaceHolder.lockCanvas可以返回null?” – Lenciel 2012-12-10 06:24:19
从解决同样问题的个人经验。 – 2012-12-10 14:01:09