我的一个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/

10-11 17:08