时间:2021-05-20
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就继承这个自定义的类就行。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android永不锁屏,开机不锁屏,删除设置中休眠时间选项,
iphonexsmax怎么设置锁屏密码?如何设置iphonexsmax锁屏密码?设置iphonexsmax锁屏密码的方法。iphonexsmax锁屏密码设置方法
去掉故事锁屏的方法如下: 1、锁屏亮屏状态长按故事锁屏壁纸,会出现壁纸订阅,点击全部取消勾选; 2、返回锁屏亮屏状态长按故事锁屏壁纸,会出现锁屏设置,点击壁
强行取消故事锁屏的方法如下: 1、锁屏亮屏状态长按故事锁屏壁纸,会出现壁纸订阅,点击全部取消勾选; 2、返回锁屏亮屏状态长按故事锁屏壁纸,会出现锁屏设置,点
Android7.0调用相机崩溃解决办法错误提示:android.os.FileUriExposedException:file:///storage/emul