从app退出时,线程暂停为Suspended(异常NullPointerException)

时间:2013-05-30 15:12:34

标签: android multithreading nullpointerexception

我有一个使用以下代码的线程的应用: @覆盖 public void run() {     Canvas canvas = null;

while (running)
{
    try {
        canvas=surfaceHolder.lockCanvas(null);
        synchronized (surfaceHolder)
        {
            {
                GenerateScan(canvas);
                processRequest=false;
            }
        }

    }
    finally
    {
        if (canvas!=null)
        {
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    } //<<<<<<<<<

}
}

应用程序似乎运行良好,但是当我触摸屏幕上的后退箭头时,应用程序似乎正常结束但在短时间后显示消息“不幸的是,xxxx已停止”。当我使用连接到仿真器的平板电脑运行它时,处理在“finally”部分的末尾(标有&lt;&lt;&lt;&lt;上面)停止,并在Debug选项卡中显示消息:

Thread[<12> nnnViewThread](Suspended(exception NullPointException))

1 个答案:

答案 0 :(得分:0)

你需要在表面被破坏时加入线程(通过后退按钮按下)。 在surfaceDestroyed()上,做这样的事情:

    boolean retry = true;

    if (thread != null)
    {
        thread.running = false;
        while (retry) 
        {
            try 
            {
                thread.join();
                retry = false;
            } 
            catch (Exception e) 
            {
                Log.v("EXCEPTION ON_SURFACE_DESTROYED!", e.getMessage());
            }
        }
    }

    thread = null;
    activity.finish();