我的一个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。也许我以错误的方式重新创建了线程?
任何帮助,将不胜感激。
最佳答案
我解决了这个问题。问题在于,join方法在释放曲面视图的画布之前已经完成了渲染线程。
我认为这样一来,即使活动消失,画布仍保持锁定状态。可能由于这个原因,没有调用onStop方法。
关于android - Android onpause未触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24003329/