我有一个使用以下代码的线程的应用: @覆盖 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))
答案 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();