0

我有一个应用程序使用带有以下代码的线程:@Override 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”部分(上面标有 <<<)的末尾停止,并在“调试”选项卡中显示消息:

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

1 回答 1

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();
于 2013-05-31T05:00:04.007 回答