我应该查看 Android 个 ANR 什么?

What am I supposed to look at Android ANRs?

我有一个 React Native 应用程序,有时它会崩溃,让我可以选择发送反馈。当我从 Google Play 控制台访问 ANR 和崩溃时,我收到了一堆日志,但我不确定那是什么意思。

在简历中,主题是

"main" tid=1 Native
"Jit thread pool worker thread 0" tid=2 Native
"ReferenceQueueDaemon" tid=4 Waiting
"FinalizerDaemon" tid=5 Waiting
"FinalizerWatchdogDaemon" tid=6 Waiting
"Binder:24455_1" tid=8 Native
"Binder:24455_2" tid=9 Native
"Profile Saver" tid=10 Native
"queued-work-looper" tid=11 Native
"Queue" tid=13 Waiting
"Queue" tid=14 Waiting
"Queue" tid=15 Waiting
"Queue" tid=16 Waiting
"Queue" tid=17 Waiting
"Queue" tid=18 Waiting
"Queue" tid=19 Waiting
"Queue" tid=20 Waiting
"Queue" tid=21 Waiting
"Crashlytics Exception Handler1" tid=22 Waiting
"Answers Events Handler1" tid=23 Waiting
"OkHttp ConnectionPool" tid=26 TimedWaiting
"RenderThread" tid=28 Native
"HybridData DestructorThread" tid=29 Waiting
"Binder:24455_3" tid=30 Native
"mqt_js" tid=31 Native
"mqt_native_modules" tid=32 Native
"OSH_WritePrefs" tid=33 Native
"Signal Catcher" tid=3 Runnable
"HeapTaskDaemon" tid=7 Blocked 

我不会给出所有的日志,因为太多了。但是第一个 "main" tid=1 Native 有:

"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 flags=1 obj=0x73e2a870 self=0x796e8c0a00
| sysTid=24455 nice=-10 cgrp=default sched=0/0 handle=0x797309b9b0
| state=S schedstat=( 62495905795 17738489601 195362 ) utm=5213 stm=1036 core=4 HZ=100
| stack=0x7fcb7ee000-0x7fcb7f0000 stackSize=8MB
| held mutexes=
#00  pc 000000000001dd6c  /system/lib64/libc.so (syscall+28)
#01  pc 0000000000065d44  /system/lib64/libc.so (pthread_cond_wait+96)
#02  pc 0000000001da88dc  /data/app/com.android.chrome-YPgu5fbzu8Na_XBkB4z-ag==/base.apk (???)
at org.chromium.ui.base.WindowAndroid.nativeOnVSync (Native method)
at org.chromium.ui.base.WindowAndroid.a (PG:220)
at cKD.a (PG:16)
at cKm.doFrame (PG:24)
at android.view.Choreographer$CallbackRecord.run (Choreographer.java:964)
at android.view.Choreographer.doCallbacks (Choreographer.java:778)
at android.view.Choreographer.doFrame (Choreographer.java:710)
at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:952)
at android.os.Handler.handleCallback (Handler.java:789)
at android.os.Handler.dispatchMessage (Handler.java:98)
at android.os.Looper.loop (Looper.java:169)
at android.app.ActivityThread.main (ActivityThread.java:6595)
at java.lang.reflect.Method.invoke (Native method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:240)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:767)

那么,这个主题或上面的任何其他主题是否有任何有价值的信息?

这些 "topics" 是线程列表和这些线程上的堆栈跟踪。所以第一个列表显示您有线程:

  • 一个主线程(用于渲染UI)
  • 一些队列
  • 垃圾收集对象的一些终结器

等等

您引用的第二部分是堆栈跟踪。这向您展示了线程在做什么,在本例中是主线程。 ANR(应用程序无响应)通常是由主线程上的某些缓慢 运行 引起的,因此这很有用。

从这里可以看出代码在org.chromium.ui.base.WindowAndroid.nativeOnVSync (Native method)中。因此,这表明您在 React 中创建的内容在 WebView 中呈现得非常慢。