我在画布上的 Android 绘画中有一个线程。一切正常,但是如果我按下后退按钮,应用程序会崩溃,因为线程仍试图在当时已经为空的画布上绘制。从代码中我会说线程不应该再到达那段代码。
按下后退按钮时,我的 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(在这里我得到了我的空指针异常)。任何人的想法?