谷歌播放控制台中的 ANR(应用程序无响应)崩溃,我不明白

Posted

技术标签:

【中文标题】谷歌播放控制台中的 ANR(应用程序无响应)崩溃,我不明白【英文标题】:ANR (Application not responding) crash in google play console which I don't understand 【发布时间】:2018-10-20 11:15:56 【问题描述】:

两周前,我在Google Play Store 上的游戏(使用Unity 制作)开始报告如此多的崩溃,我不知道可能是什么问题。

"main" tid=1 Native "main" prio=5 tid=1 Native
  | group="main" sCount=1 dsCount=0 flags=1 obj=0x73960618 self=0xecf6f000
  | sysTid=28247 nice=-4 cgrp=default sched=0/0 handle=0xf1a014bc
  | state=S schedstat=( 2314581326 753030573 4325 ) utm=164 stm=66 core=1 HZ=100
  | stack=0xff11e000-0xff120000 stackSize=8MB
  | held mutexes=
  #00  pc 0000000000018e9c  /system/lib/libc.so (syscall+28)
  #01  pc 000000000004850d  /system/lib/libc.so (_ZL24__pthread_cond_timedwaitP23pthread_cond_internal_tP15pthread_mutex_tbPK8timespec+102)
  #02  pc 0000000000039bb1  /data/app/com.android.chrome-Oy13PXODRGoydMIrhaZcSQ==/base.apk (???)
  at org.chromium.ui.base.WindowAndroid.nativeOnVSync (Native method)
  at org.chromium.ui.base.WindowAndroid.access$700 (WindowAndroid.java:134)
  at org.chromium.ui.base.WindowAndroid$1.onVSync$5166USJ75THMGSJFDLKNAR9FELKIULIJF5N66JBFDPKN8RRI7D52ILG_0 (WindowAndroid.java:16)
  at org.chromium.ui.VSyncMonitor$1.doFrame (VSyncMonitor.java:22)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:909)
  at android.view.Choreographer.doCallbacks (Choreographer.java:723)
  at android.view.Choreographer.doFrame (Choreographer.java:655)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:897)
  at android.os.Handler.handleCallback (Handler.java:789)
  at android.os.Handler.dispatchMessage (Handler.java:98)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

【问题讨论】:

【参考方案1】:

在以下情况下显示 ANR:

在 5 秒内没有响应输入事件(例如按键或屏幕触摸事件)。 BroadcastReceiver 未在 10 秒内完成执行。

检查您的所有 BroadcastReceiver、Serviced 和活动,以查看您是否在主线程上运行较长的进程并超过阈值。请注意,BroadcastReceiver 在主线程中执行代码。

如果您在代码中的任何位置使用Thread.sleep(),您也可以进行搜索。您可以找到更多信息here

【讨论】:

感谢您解释它 Sagar。在我将 Facebook 事件集成到应用程序/游戏中后,这也开始发生。这是集成的依赖“com.facebook.android:facebook-android-sdk:4.30.0” 当一个事件被触发时,检查你是否正在执行长进程。 不,这是不对的。如果主线程被外部库的调用栈占用,那是该库的错。如果您的应用程序代码和库代码之间有一个共享同步点(互斥量/信号量),并且您的一方会错误地保持该点未发布,那么这不可能是您的错的唯一方法。这是不太可能的,因为库代码几乎是分开的,因此我得出结论,库已自行将自己置于长时间等待状态。

以上是关于谷歌播放控制台中的 ANR(应用程序无响应)崩溃,我不明白的主要内容,如果未能解决你的问题,请参考以下文章

Crash与ANR

IntentService 中的数据库操作导致应用程序停止,变得无响应并给出 ANR

monkey常用命令

安卓应用、Android 8(.1)、90% 华为设备中的 ANR 和崩溃

android中的Handler消息机制

Android ANR的产生与分析