Android 4.0で標準のゲームスレッドでいくつかのゲームをテストすると、アクティビティがシャットダウン(ホームボタンなど)され、nullPointer 。アクティビティを終了するときにAndroid 4.0でスレッドクラッシュが発生する
これは、GoogleがプログラムしたLunarLanderサンプルでも発生します。
問題は、アクティビティから出るときにCanvasがnullになり、アプリケーションがクラッシュするという問題です。
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を使用してスレッドを開始するときのコードです。
以下は、スレッドを作成し、サーフェスが破棄されたときにスレッドをシャットダウンするときです。
@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 Developersサイトのどこにでも書かれているとは思わない。 –
ここでもまったく同じ問題ですが、「Android 4.0では、SurfaceHolder.lockCanvasはnullを返すことができますか? – Lenciel
同じ問題に取り組む個人的な経験から。 –