我在我的Android应用程序中面临着一个奇怪的问题。我的应用程序使用单独的线程在SurfaceView上绘制。暂停应用程序时,渲染线程已停止。我正在处理应用程序的讨厌方法中的线程关闭。在恢复应用程序之后,在Applications OnResume方法中重新创建渲染线程的新实例。

整件事件在我暂停申请后,它应该是这样的。但是,当我第二次尝试时,不调用我的活动的讨厌方法。即使应用程序不再可见,渲染线程也会在后台运行。

暂停我使用主页按钮的活动。据我所知,这应该触发okeause,然后在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();
}   
.

我想知道的是,即使我按HOME按钮,也不会被调用为什么不被调用。也许我以错误的方式重新创建线程? 任何帮助都会受到赞赏。

有帮助吗?

解决方案

我解决了这个问题。问题是加入方法在释放SurfaceView的画布之前完成了渲染线程。

我假设这种方式即使在活动消失后,画布也被锁定了。可能,由于此,未调用OnStop方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top