【发布时间】:2011-11-26 16:27:44
【问题描述】:
我正在使用在许多示例中看到的 SurfaceView/Thread 模型制作一个 android 游戏。我正在尝试将组件拆分为多个活动。现在我有一个菜单活动和一个游戏活动。出于某种原因,当我尝试完成游戏活动以返回菜单活动时,我的应用程序将变得无响应。它似乎在模拟器上运行良好,但在我的设备(Samsung Mesmerize)上它会变得无响应。我有一种感觉,这是因为一个线程在游戏活动中仍然很忙,但我不知道如何杀死该线程。我也尝试过打破游戏循环,但似乎没有帮助。
我的SurfaceView有一个内线程类,这里是run()的实现
public void run()
{
_isRunning = true;
Canvas c = null;
while(_isRunning)
{
try
{
c = _surfaceHolder.lockCanvas();
synchronized(_surfaceHolder)
{
if(_engine != null)
{
_engine.gameLogic();
if(c != null)
_engine.draw(c);
}
}
}
finally
{
if(c != null)
_surfaceHolder.unlockCanvasAndPost(c);
}
}
}
【问题讨论】:
-
如果您确定它是由线程引起的,请考虑使用threadpool 管理/控制所有线程生命周期,将它们全部杀死,只需调用 ExecutorService.shutdownNow();
-
我不太确定。我想这可能是一个没有完成的线程。有时活动成功退出到基础活动,有时应用程序变得完全没有响应。它似乎在模拟器上正常工作。
-
然后使用代码 sn-p 改进您的问题,异常堆栈跟踪可能会帮助其他人找到您的问题。
-
从未抛出异常。应用只是变得无响应。
标签: android multithreading android-activity