繁体   English   中英

Android线程:屏幕关闭时应用程序挂起

[英]Android Thread: App hangs when screen turns off

我正在在线程上运行的SurfaceView类中使用画布。 SurfaceView由活动(setContentView(surfaceview))调用。 当屏幕关闭时,它将通过pause()方法关闭所有循环变量,依此类推。

奇怪的是:在平板电脑(Android 4.4.2)上,线程会暂停并正确恢复(线程重新开始),但是在我的手机(Android 4.2.2)和其他人的手机(CM 11)上,应用程序挂起(它不会崩溃!它只是挂起),我必须杀死它。 LogCat不会打印任何内容-但是我尝试使用Log.i找出会发生什么,似乎在pause方法完成后,pause方法再次启动,这就是应用程序挂起的地方。

我之前已经检查过,并且pause / resume方法被正确调用(使用super.onPause()/ Resume()然后surfaceview.pause()/ resume()重写Activity的onPause / onResume)

我的暂停/恢复方法:

public void resume() {
    countdown = true; // this one,
    threadRun = true;  // this one and
    finishWait = true; // this one each are loop controllers
    won = false;

    hitCount = 0;

    thread = new Thread(this);
    thread.start();
}

public void pause() {
    Log.i("codeflow", "Pause method start");

    // all loop controllers have been set to false
    countdown = false;
    threadRun = false;
    finishWait = false;

    /* Log.i("CodeFlow", "drawablank");
    drawABlankScreen(); // to hide everything drawn */

    while (true) {
        try {
            Log.i("codeflow", "Thread.join() loop");
            thread.join();
            break;
        } catch(InterruptedException e) {
            Log.i("codeflow", "InterruptedException");
            e.printStackTrace();
        }
    }
    thread = null;
    Log.i("codeflow", "Thread is killed");

    if (won && !lost) { // !lost IS necessary
        Log.i("CodeFlow", "save highscore");
        saveHighscore(highscore);
    }

}

暂停方法将按照其应有的方式进行所有操作,但随后又重新启动(另一个“暂停方法开始”)并进入drawABlankScreen()或在注释了此链接后立即打印“ Thread.join()循环”然后该应用程序挂起。

挂在手机上而不挂在平板电脑上的东西最让我感到困扰。 有人可以帮我吗,我已经搜寻了几个小时,却一无所获...

在onPause()中将UI线程连接到后台线程可能是导致您出现问题的原因。

相反,您应该杀死线程。

thread.join() ”将挂起执行该语句的线程,直到线程结束。 遗憾的是,如果在Android UI线程中执行,Android不会崩溃。(对不起,我的英语很全。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM