android.os.MessageQueue.nativePollOnce 处的 ANR

Har*_*ngh 102 performance android android-anr-dialog firebase android-looper

我们在应用程序的不同部分看到了此 ANR。想了解导致此 ANR 的原因吗?

main (native): tid=1 systid=31940
#00 pc 0x5431c libc.so 
#01 pc 0x1313a5 libart.so 
#02 pc 0x2ab05b libart.so 
#03 pc 0x3659 libnativehelper.so 
#04 pc 0x9dee9 libandroid_runtime.so 
#05 pc 0x65c45 libgui.so 
#06 pc 0x11dcd libutils.so 
#07 pc 0x11abf libutils.so 
#08 pc 0xbcc7d libandroid_runtime.so 
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:339)
       at android.os.Looper.loop(Looper.java:199)
       at android.app.ActivityThread.main(ActivityThread.java:8276)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006)
Run Code Online (Sandbox Code Playgroud)

这是 firebase 对于此 ANR 的说法 -

ANR 发生时该线程处于空闲状态。我们没有足够的信息来确定根本原因。

Yaq*_*tti 23

本机轮询一次:

\n

当 CPU 等待新任务/消息时出现。

\n

理由:

\n
    \n
  1. 如果BroadCast Receiver在10秒内没有完成执行,则可能会发生ANR。
  2. \n
  3. 5秒内无响应输入事件
  4. \n
  5. 当应用程序尝试错误地显示对话框但调用不是来自主线程时,可能会导致 ANR。(注意:验证来自UI线程的UI View的所有调用)
  6. \n
  7. 可能是由于内存泄漏而发生。
  8. \n
  9. Handler.postDelayed 可能会产生问题
  10. \n
  11. 这种类型的崩溃很常见,当发生堆栈转储时,一些 app\xe2\x80\x99s 堆栈跟踪可能会在实际 ANR 时间之后很长一段时间内被转储
  12. \n
  13. 它可能会在 SCREEN_ON BROADCAST 上发生,并且 Google 广告正在使用 SCREEN_ON BROADCAST。
  14. \n
  15. 它可能发生在垃圾收集过程中(通过
    \nEzequiel Adrian 评论)
  16. \n
\n

收集 ANR 的方法:

\n
    \n
  1. 看门狗
  2. \n
  3. 捕获本机 SIGQUIT
  4. \n
  5. ApplicationExitInfo(由 crashalytics 使用)
  6. \n
  7. 从 Google Play 管理中心收集
  8. \n
  9. Firebase(Firebase 仅从 Android 11 及更高版本收集)
  10. \n
\n

解决 ANR 的挑战:

\n

揭秘 ANR 之谜。关联

\n

解决方案:

\n
    \n
  1. 优化初始化和广告加载。关联
  2. \n
  3. 如果您正在使用 Media,则在 IO 线程中释放它
  4. \n
  5. 使用泄漏金丝雀或 Android\n分析器查找内存泄漏并进行追踪
  6. \n
  7. 将firebase降级到28.4.2(不会收集ANR,但并不意味着不会发生)
  8. \n
  9. 验证 UI 线程中对 UI View 的所有调用
  10. \n
  11. 更多信息来自来自问题跟踪器
  12. \n
  13. 更多信息堆栈 Ans
  14. \n
\n


小智 8

面临同样的问题 - 我读到它与 Admob 或统一广告有关,并且谷歌有一个开放线程:https ://issuetracker.google.com/issues/230950647?pli=1