我在我的一个Android应用程序中面临一个奇怪的问题。我的应用程序使用单独的线程绘制了surfaceview。暂停应用程序时,将停止呈现线程。我正在处理应用程序的onPause方法中的线程关闭。恢复到应用程序后,将在应用程序onResume方法中重新创建渲染线程的新实例。
当我暂停应用程序一次时,整个事情就会发生。但是,当我第二次尝试时,我的活动的onPause方法没有被调用。即使应用程序不再可见,渲染线程仍在后台运行。
要暂停活动,我正在使用主页按钮。据我了解生命周期,这应该触发onPause,然后触发onStop。我第一次这样做是完美的,但我想知道为什么它第二次不起作用。
以下是我的onPause方法的一些代码:
@Override
public void onPause() {
Log.v(null, "calling onpause");
gameview.getHolder().removeCallback(this);
gameview.setFocusable(false);
gameview.setOnTouchListener(null);
if (!isInitializing) {
thread.skipPause = false;
thread.setRunning(false);
boolean retry=true;
while (retry) {
try {
thread.join();
retry = false;
} catch (InterruptedException e) {
}
}
thread=null;
} else {
shouldBePaused = true;
}
super.onPause();
}
这是我的onResume方法:
@Override
public void onResume() {
gameview.getHolder().addCallback(this);
gameview.setFocusable(true);
gameview.setOnTouchListener(this);
thread = new MainThread(gameview.getHolder(), this);
super.onResume();
}
我想知道的问题是为什么onPause没有被调用,即使我按下主页按钮。也许我以错误的方式重新创建线程? 任何帮助将不胜感激。
答案 0 :(得分:1)
我解决了这个问题。问题是join-method在释放surfaceview的画布之前完成了渲染线程。
我认为,即使在活动消失后,画布也保持锁定状态。可能由于这个原因,没有调用onStop方法。