[英]Android Thread: App hangs when screen turns off
我正在在线程上运行的SurfaceView类中使用画布。 SurfaceView由活动(setContentView(surfaceview))调用。 当屏幕关闭时,它将通过pause()方法关闭所有循环变量,依此类推。
奇怪的是:在平板电脑(Android 4.4.2)上,线程会暂停并正确恢复(线程重新开始),但是在我的手机(Android 4.2.2)和其他人的手机(CM 11)上,应用程序挂起(它不会崩溃!它只是挂起),我必须杀死它。 LogCat不会打印任何内容-但是我尝试使用Log.i找出会发生什么,似乎在pause方法完成后,pause方法再次启动,这就是应用程序挂起的地方。
我之前已经检查过,并且pause / resume方法被正确调用(使用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);
}
}
暂停方法将按照其应有的方式进行所有操作,但随后又重新启动(另一个“暂停方法开始”)并进入drawABlankScreen()或在注释了此链接后立即打印“ Thread.join()循环”然后该应用程序挂起。
挂在手机上而不挂在平板电脑上的东西最让我感到困扰。 有人可以帮我吗,我已经搜寻了几个小时,却一无所获...
在onPause()中将UI线程连接到后台线程可能是导致您出现问题的原因。
相反,您应该杀死线程。
“ thread.join()
”将挂起执行该语句的线程,直到线程结束。 遗憾的是,如果在Android UI线程中执行,Android不会崩溃。(对不起,我的英语很全。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.