我在画布上的 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(在这里我得到了我的空指针异常)。任何人的想法?