【问题标题】:Android onpause not firedAndroid onpause 未触发
【发布时间】:2023-03-15 18:22:01
【问题描述】:

我在我的一个 Android 应用程序中遇到了一个奇怪的问题。我的应用程序使用单独的线程在表面视图上绘制。当应用程序暂停时,渲染线程将停止。我正在处理应用程序的 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,即使我按下了主页按钮。也许我以错误的方式重新创建线程? 任何帮助将不胜感激。

【问题讨论】:

    标签: android onpause


    【解决方案1】:

    我解决了这个问题。问题是连接方法在释放表面视图的画布之前完成了渲染线程。

    我认为即使在活动消失后,画布也会保持锁定状态。可能是因为这个原因 onStop 方法没有被调用。

    【讨论】:

      猜你喜欢
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多