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自定义环形对比图效果
相关文章
Android Studio中导入JNI生成的.so库的实现方法
这篇文章主要介绍了Android Studio中导入JNI生成的.so库的实现方法的相关资料,这里不仅提供实现方案并提供了实现的方法,需要的朋友可以参考下2017-07-07Android开发之自定义view实现通讯录列表A~Z字母提示效果【附demo源码下载】
这篇文章主要介绍了Android开发之自定义view实现通讯录列表A~Z字母提示效果,结合完整实例形式分析了Android获取通讯录列表及采用自定义view排列显示的相关操作技巧,需要的朋友可以参考下2017-07-07深入android Unable to resolve target ''android-XX''详解
本篇文章是对android Unable to resolve target 'android-XX'错误的解决方法进行了详细的分析介绍,需要的朋友参考下2013-06-06
最新评论