从锁定屏幕通知打开时,Android上的Libgdx崩溃

时间:2018-03-05 03:52:37

标签: android libgdx android-lifecycle

我在这里有一个罕见的案例,我一直试图弄清楚并且正式失败。基本上,我们在我们的libgdx应用程序中集成了OneSignal用于推送通知,并且发现如果应用程序在后台,并且通知从锁定屏幕轻敲,则应用程序无法恢复,并最终崩溃;

AndroidGraphics: waiting for pause synchronization took too long; assuming deadlock and killing

所有其他方案按预期工作;

点击通知抽屉;

  • 应用已关闭:应用已打开
  • 应用程序背景:应用程序将前景
  • 应用前景:没有(只是一些内部处理)

点击锁定屏幕;

  • 应用已关闭:应用已打开
  • 应用背景:漫长的等待和崩溃
  • 应用前景:没有(只是一些内部处理)

我已经将此问题确定为与libgdx有关,因为如果我在onCreate()中初始化()一个完全空白的Game类,则会发生这种情况,但是如果我完全删除了libgdx(通过将我的LAUNCHER活动设置为空白的Activity)它将成功从锁定屏幕恢复应用程序。

在我的两个测试设备上,100%的时间都会发生这种情况,一个是Android 6.0,另一个是Android 8.1。

任何人都可以对此提供任何见解吗?从锁定屏幕恢复并且libgdx没有考虑它时,活动生命周期似乎略有不同?

上面的错误是libgdx抛出的强制异常;

    void pause () {
    synchronized (synch) {
        if (!running) return;
        running = false;
        pause = true;
        while (pause) {
            try {
                // TODO: fix deadlock race condition with quick resume/pause.
                // Temporary workaround:
                // Android ANR time is 5 seconds, so wait up to 4 seconds before assuming
                // deadlock and killing process. This can easily be triggered by opening the
                // Recent Apps list and then double-tapping the Recent Apps button with
                // ~500ms between taps.
                synch.wait(4000);
                if (pause) {
                    // pause will never go false if onDrawFrame is never called by the GLThread
                    // when entering this method, we MUST enforce continuous rendering
                    Gdx.app.error(LOG_TAG, "waiting for pause synchronization took too long; assuming deadlock and killing");
                    android.os.Process.killProcess(android.os.Process.myPid());
                }
            } catch (InterruptedException ignored) {
                Gdx.app.log(LOG_TAG, "waiting for pause synchronization failed!");
            }
        }
    }
}

0 个答案:

没有答案