gpt4 book ai didi

android - 暂停/恢复时 libgdx 出现 ANR 错误

转载 作者:行者123 更新时间:2023-12-04 18:08:32 25 4
gpt4 key购买 nike

我有一个在 android market 上运行的应用程序,我收到了 2 个 ANR 日志。

不同的 ANR 名称,但位置相同 (AndroidGraphics.java:404)。我不知道该怎么办。 ¿任何人都可以帮助我吗?

谢谢!

堆栈 1:ANR keyDispatchingTimedOut

JNI: CheckJNI is off; workarounds are off; pins=0; globals=192 (plus 11 weak)

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)

"main" prio=5 tid=1 WAIT
| group="main" sCount=1 dsCount=0 obj=0x42058578 self=0x41522120
| sysTid=15043 nice=0 sched=0/0 cgrp=apps handle=1074204668
| state=S schedstat=( 0 0 0 ) utm=1257 stm=809 core=2
at java.lang.Object.wait(Native Method)
- waiting on <0x42928d90> (a java.lang.Object)
at java.lang.Object.wait(Object.java:364)
at com.badlogic.gdx.backends.android.AndroidGraphics.pause(AndroidGraphics.java:404)
at com.badlogic.gdx.backends.android.AndroidApplication.onPause(AndroidApplication.java:217)
at com.packetname.gameName.MainActivity.onPause(MainActivity.java:124)
at android.app.Activity.performPause(Activity.java:5235)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1233)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3050)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3019)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2997)
at android.app.ActivityThread.access$800(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1267)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

堆栈 2: ANR Intent 广播 { act=android.intent.action.SCREEN_OFF flg=0x50000010 }

    DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0)

"main" prio=5 tid=1 WAIT
| group="main" sCount=1 dsCount=0 obj=0x40ba7568 self=0x40b97a18
| sysTid=1566 nice=0 sched=0/0 cgrp=apps handle=1075324464
| schedstat=( 267164153 509750763 1051 ) utm=17 stm=9 core=1
at java.lang.Object.wait(Native Method)
- waiting on <0x411f0908> (a java.lang.Object)
at java.lang.Object.wait(Object.java:364)
at com.badlogic.gdx.backends.android.AndroidGraphics.pause(AndroidGraphics.java:404)
at com.badlogic.gdx.backends.android.AndroidApplication.onPause(AndroidApplication.java:217)
at com.packetname.gameName.MainActivity.onPause(MainActivity.java:102)
at android.app.Activity.performPause(Activity.java:5106)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1225)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2825)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2794)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2772)
at android.app.ActivityThread.access$800(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

最佳答案

您的渲染代码路径中的某些内容挂起,或者花费的时间太长。

您显示的堆栈跟踪是针对主 android 线程的,在 Libgdx 中,它与运行 libgdx 代码的渲染线程不同。参见 https://code.google.com/p/libgdx/wiki/TheArchitecture#The_Application .暂停路径中发生的事情是

  1. Android 要求主线程暂停
  2. 主线程要求 libgdx 渲染线程暂停(参见 onPause at AndroidApplication.java line 214 ),这会调用 graphics.pause()
  3. graphics.pause()(参见 AndroidGraphics.java line 409),设置 pause 标志并旋转直到标志被清除。
  4. pause 标志由渲染循环中的渲染线程清除(参见 AndroidGraphics 中的 onDrawFrame)。

如果您的渲染循环卡在某个地方,那么暂停标志将永远不会被清除,主线程也不会唤醒,Android 将终止您的应用。

因此您显示的回溯只包括前三个步骤(在 Android 线程上)而不是有趣的回溯。

希望崩溃报告包括系统中其他线程的回溯。

如果这是一次罕见的崩溃,可能是您的渲染循环在某处挂起(与暂停代码无关),用户感到恼火,并尝试切换上下文,而 Android 尝试暂停系统,然后 Android 生气并杀死你的应用程序。这就是为什么你永远不应该在渲染线程上做任何非常慢的事情(比如等待网络响应或从慢速存储中读取大量内容):用户可能随时暂停,并期望你的渲染线程快速执行暂停操作。

关于android - 暂停/恢复时 libgdx 出现 ANR 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20146353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com