キャンバス上の Android ペインティングにスレッドがあります。すべて正常に動作しますが、戻るボタンを押すと、スレッドがまだその時点で null であるキャンバスに描画しようとするため、アプリがクラッシュします。コードから、スレッドがそのコードに到達することはもうないはずです。
戻るボタンを押すと、Surface が破棄されます。
public void surfaceDestroyed(SurfaceHolder holder)
{
boolean retry = true;
thread.setRunning(false);
while (retry)
{
try
{
thread.join();
retry = false;
}
catch (InterruptedException e)
{
}
}
}
上でわかるように、thread.setRunning を false に設定すると、私のスレッドはこれを行います
public void run()
{
while (run)
{
Canvas c = null;
try
{
c = sh.lockCanvas(null);
synchronized (sh)
{
doDraw(c);
}
}
finally
{
if (c != null)
{
sh.unlockCanvasAndPost(c);
}
}
}
}
この var を false に設定するとすぐに while ループが停止するはずですが、それでも doDraw() メソッドに入ります。doDraw (ここで null ポインターの例外が発生します) がまだ呼び出されている理由がわかりません。アイデアはありますか?