gpt4 book ai didi

Android onpause 未触发

转载 作者:行者123 更新时间:2023-11-30 02:51:51 26 4
gpt4 key购买 nike

我的一个 Android 应用程序遇到了一个奇怪的问题。我的应用程序使用单独的线程在表面 View 上绘制。当应用程序暂停时,渲染线程也会停止。我在应用程序的 onPause 方法中处理线程的关闭。恢复到应用程序后,将在应用程序的 onResume 方法中重新创建渲染线程的新实例。

当我暂停应用程序一次时,整个事情都按照预期进行。但是,当我第二次尝试时,我的 Activity 的 onPause 方法没有被调用。渲染线程在后台继续运行,即使应用程序不再可见。

要暂停我正在使用主页按钮的 Activity 。据我了解生命周期,这应该触发 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-method 在释放 surfaceview 的 Canvas 之前完成了渲染线程。

我假设即使在 Activity 消失后 Canvas 仍保持锁定状态。可能由于这个原因,没有调用 onStop 方法。

关于Android onpause 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24003329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com