Libgdx解决部分Android机型锁屏崩溃的方法
作者:tpnet
今天小编就为大家分享一篇关于Libgdx解决部分Android机型锁屏崩溃的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
libgdx使用了全屏模式之后,在某些机型会出现崩溃的情况,两年前就存在了,一直到现在为止,官方都没进行修复,其崩溃原因就是在源码AndroidGraphics.java中的onPause可以看到这样子的一段代码:
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!"); } } } }
崩溃的提示就是在这个方法中进行抛出的,解决方法就是,不让他抛出这个错误,就是在try里面把pause改为false,目前的解决方法是这样子,静候官方的修复了,自定义一个类,例如我用的是AndroidFragmentApplication,我自定义一个PatchedAndroidFragmentApplication,在onPause之后利用线程延迟100毫秒,执行一个onDrawFrame,使得pause为false即可:
open class PatchedAndroidFragmentApplication : AndroidFragmentApplication() { private val exec = Executors.newSingleThreadExecutor() private val forcePause = Runnable { try { Thread.sleep(100) } catch (e: InterruptedException) { } graphics.onDrawFrame(null) } override fun onPause() { if (activity!!.window.attributes.flags and WindowManager.LayoutParams.FLAG_FULLSCREEN == WindowManager.LayoutParams.FLAG_FULLSCREEN) { // 是全屏 exec.submit(forcePause) } super.onPause() } }
然后你的Fragment就继承这个自定义的类就行。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:
- 详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题
- 详解Android Libgdx中ScrollPane和Actor事件冲突问题的解决办法
- Android使用libgdx实现模拟方向键控制角色移动的方法
- Android 游戏引擎libgdx 资源加载进度百分比显示案例分析
- Android drawable微技巧,你不知道的drawable细节
- Android指纹识别API讲解,一种更快更好的用户体验
- Android在Kotlin中更好地使用LitePal
- Android Studio轻松构建自定义模板的步骤记录
- 详解Android 检测权限的三种写法
- Android最简单的状态切换布局实现教程
- android自定义环形对比图效果