【发布时间】:2015-03-15 13:18:09
【问题描述】:
我在线程上运行的 SurfaceView 类中使用 Canvas。 SurfaceView 由 Activity (setContentView(surfaceview)) 调用。当屏幕关闭时,它会通过一个 pause() 方法关闭所有循环变量等等。
奇怪的是:在我的平板电脑(Android 4.4.2)上,线程暂停并正确恢复(线程从头开始),但在我的手机(Android 4.2.2)和其他人的手机(CM 11)上)应用程序挂起(它不会崩溃!它只是挂起),我必须杀死它。 LogCat 不打印任何东西 - 但是我试图找出使用 Log.i 会发生什么,似乎在 pause 方法完成后,pause 方法再次启动,这就是应用程序挂起的地方。
我之前检查过,并且暂停/恢复方法被正确调用(使用 super.onPause()/Resume() 和 surfaceview.pause()/resume() 覆盖 Activity 的 onPause/onResume)
我的暂停/恢复方法:
public void resume() {
countdown = true; // this one,
threadRun = true; // this one and
finishWait = true; // this one each are loop controllers
won = false;
hitCount = 0;
thread = new Thread(this);
thread.start();
}
public void pause() {
Log.i("codeflow", "Pause method start");
// all loop controllers have been set to false
countdown = false;
threadRun = false;
finishWait = false;
/* Log.i("CodeFlow", "drawablank");
drawABlankScreen(); // to hide everything drawn */
while (true) {
try {
Log.i("codeflow", "Thread.join() loop");
thread.join();
break;
} catch(InterruptedException e) {
Log.i("codeflow", "InterruptedException");
e.printStackTrace();
}
}
thread = null;
Log.i("codeflow", "Thread is killed");
if (won && !lost) { // !lost IS necessary
Log.i("CodeFlow", "save highscore");
saveHighscore(highscore);
}
}
pause 方法按其应有的方式遍历所有内容,但随后它再次启动(另一个“Pause 方法启动”)并进入 drawABlankScreen(),或者,当此链接被注释时,它打印“Thread.join()循环”一次,然后应用挂起。
最让我烦恼的是它挂在我的手机上,而不是挂在我的平板电脑上。 谁能帮帮我,我已经搜索了几个小时,一无所获....
【问题讨论】:
-
你试过在硬件调试的情况下运行它吗?
-
@Kerry 硬件调试?我怎样才能做到这一点? (对不起,我对 android 开发有点陌生)
标签: java android multithreading surfaceview onpause