当前位置: 首页 > 知识库问答 >
问题:

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

全飞扬
2023-03-14

我正在使用在线程上运行的 SurfaceView 类中的画布。SurfaceView 由 Activity (setContentView(surfaceview)) 调用。当屏幕关闭时,它会通过一个 pause() 方法关闭所有循环变量等。

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

我之前检查过,暂停/恢复方法被正确调用(使用 super.onPause()/Resume() 覆盖活动的 onPause/onResume,然后是 surfaceview.pause()/resume())

我的暂停/恢复方法:

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);
    }

}

pause方法以它应该的方式完成了所有事情,但是它又开始了(另一个“Pause方法开始”),或者转到drawABlankScreen(),或者当这个克林被注释时,它打印“Thread.join() loop”一次,然后应用程序挂起。

最让我恼火的是,它可以挂在我的手机上,却不能挂在我的平板电脑上。谁能帮我一下,我已经找了几个小时了,什么也没找到....

共有2个答案

杜君浩
2023-03-14

thread.join()” 将挂起执行此句子的线程,直到线程运行。当然,如果在Android UI线程中执行,Android不会崩溃。(对不起,我的英语错误很多)。

秦博达
2023-03-14

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

相反,您应该终止线程。

 类似资料:
  • 关闭屏幕盖时   设定关闭屏幕盖时的动作。 标准 关闭屏幕盖时,显示专用的画面。 进入睡眠模式 让主机进入睡眠模式。 提示 若主机处于锁定状态(POWER(电源)/HOLD(固定)按钮滑至下方),即使已选择[进入睡眠模式],主机仍不会在关闭屏幕盖时进入睡眠模式。 屏幕盖关闭时显示的画面 在屏幕盖关闭时按下L/R按钮,即可变更显示的内容。 同时按下L/R按钮 每次同时按下L/R按钮,可交替显示月历/

  • 问题内容: 我需要在Java Web应用程序停止或tomcat停止时保存一些数据。如何才能做到这一点?编辑:如果我使用jvm shutdown钩有什么缺点? 问题答案: 使用在您的web.xml 中实现ServletContextListener的类:

  • 我想把这张图片设置为我的应用程序的背景,但没有用: 我的原木猫: 活动main.xml:

  • 我知道这个问题在网站上被问了很多,但是,我似乎找不到一个解决办法。当应用程序未运行时,不调用我的BOOT_COMPLETED接收器。 清单: 如果应用程序正在运行,并且我使用 事件被正确接收,但是,如果应用程序被关闭,事件不会被接收,也不会在启动时被接收。 我已经安装了应用程序,然后启动了它几次,以确保它已经注册。我对这件事很迷茫,所以任何建议都将非常感谢。

  • 所以我正在制作一个简单的寻宝游戏。我已经实现了SurfaceHolder.Callback和OnTouchListener方法。当触摸屏幕以挖掘宝藏时,应用程序崩溃。 下面是 DrawSurface 类的代码: 以下是我收到的错误消息: E/AndroidRuntime: FATAL EXCEPTION: main Process:justinrhinehart.cse.fullsail.trea