你能帮我解决这个ANR问题吗?用户向Google Play控制台报告了很多次,但我无法自行重现。非常感谢。
"main" prio=5 tid=1 Native | group="main" sCount=1 dsCount=0 obj=0x73898658 self=0xb0204400 | sysTid=3708 nice=-4 cgrp=default sched=0/0 handle=0xb2f69534 | state=S schedstat=( 5873509009 1942619080 10289 ) utm=484 stm=102 core=3 HZ=100 | stack=0xbe00c000-0xbe00e000 stackSize=8MB | held mutexes= #00 pc 00000000000174d4 /system/lib/libc.so (syscall+28) #01 pc 0000000000046a5d /system/lib/libc.so (_ZL24__pthread_cond_timedwaitP23pthread_cond_internal_tP15pthread_mutex_tbPK8timespec+102) #02 pc 0000000000039bb1 /data/app/com.android.chrome-1/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:872) at android.view.Choreographer.doCallbacks (Choreographer.java:686) at android.view.Choreographer.doFrame (Choreographer.java:618) at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:860) at android.os.Handler.handleCallback (Handler.java:751) at android.os.Handler.dispatchMessage (Handler.java:95) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6165) at java.lang.reflect.Method.invoke! (Native method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:778)
“ANR”代表“应用程序无响应”。这意味着您的应用已为用户锁定。通常有两个原因中的一个:
在这种情况下,我们看到堆栈跟踪的顶部位于“org.chromium.ui.base.WindowAndroid.nativeOnVSync”中。了解“铬”是为谷歌浏览器提供支持的开源项目是有帮助的。这意味着您可以查看源代码。
谷歌搜索github上的“nativeOnVysnc”找到了java source code
基本上看起来有些东西锁定在一些Chrome渲染代码中。这有助于了解Chromium用于Webkit,用于在Android应用程序中呈现webview窗口。所以很有可能你的应用程序中有某种webview,这对于渲染是行为不端,但除此之外我无法帮助你。我会在我的网页视图中查看javascript以了解内存使用情况或其他危险行为,或者查看C ++本机代码中的Chromium存储库,以尝试更好地了解正在发生的事情。
你可以做的事情很少:
我有同样的问题。但是我可以这么多地减少关于这个问题的ANR。
以前版本的Chrome有一个错误,有时不会释放VSync侦听器。但是,在最新版本的chrome中,似乎已经修复了这个bug。
https://bugs.chromium.org/p/chromium/issues/detail?id=900557
如果您的项目包含AdMob原生广告,则可能是原因。似乎UnifiedNativeAdView
在内部使用VSync,如果你不调用destroy()
,VSync监听器仍然存在并且泄漏,我想。
一周前我遇到了同样的问题。我无法在任何地方找到答案。对我的ANR分析尚不清楚。结果,事实证明这是我的错 - 在onResume()中我使用了recreate()if(camera == null)。当测试一切都没问题,并且在第一次安装之后,有一个对相机的许可请求,并且活动重新启动到无穷大。编辑代码后,此错误减少到几乎为零。您必须在代码中搜索错误。