如何解决/data/app/com.android.chrome-1/base.apk上的ANR问题?

时间:2018-06-20 10:19:07

标签: android android-anr-dialog

您可以帮助我解决此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)

4 个答案:

答案 0 :(得分:6)

“ ANR”代表“应用程序无响应”。这意味着您的应用已为用户锁定。通常有两种原因之一:

  • 您陷入僵局
  • 您正在UI线程上执行一些缓慢的操作,这意味着您的UI没有响应

在这种情况下,我们看到堆栈跟踪的顶部位于“ org.chromium.ui.base.WindowAndroid.nativeOnVSync”中。知道“铬”是为Google Chrome提供支持的开源项目,这很有帮助。这意味着您可以查看源代码。

在github上搜索“ nativeOnVysnc”发现java source code

基本上,某些Chrome渲染代码中似乎锁定了某些内容。 了解这一点有助于了解Chromium用于Webkit,该Webkit用于在Android应用程序中呈现Webview窗口。因此,您的应用程序中可能会有某种形式的Web视图,该Web视图行为不当,但我无法为您提供帮助。我会检查Web视图中的javascript内存使用情况或其他危险行为,或者在C ++本机代码的Chromium存储库中查看,以更好地了解正在发生的事情。

答案 1 :(得分:1)

您可以做的事很少:

  1. 名为ANR-WatchDog的开源git项目。 您可以使用非常简单的几个步骤来捕获所有问题。 您可以定义您认为是ANR的秒数(例如,如果将其设置为0.5秒,则可能会捕获到上述ANR。
  2. 在您的代码中搜索Wakelocks
  3. 您是否正在使用sqlite(或任何其他数据库库)?如果是这样,我会检查是否使用ANR-Watchdog进行插入,更新和获取时间太长。总体来说,请检查所有查询是否都不会长时间阻塞ui线程。

答案 2 :(得分:1)

我有同样的问题。但是我可以减少有关此问题的ANR。

1。铬虫

以前的Chrome版本存在一个错误,该错误有时不会发布VSync侦听器。 但是,在最新版本的铬上,似乎已修复了该错误。

https://bugs.chromium.org/p/chromium/issues/detail?id=900557

2。 Admob-长期持有UnifiedNativeAdView

如果您的项目有AdMob原生广告,则可能是原因。 看来UnifiedNativeAdView在内部使用VSync,如果您不调用destroy(),我认为VSync侦听器仍然存在并泄漏。

答案 3 :(得分:0)

一周前我遇到了同样的问题。我在任何地方都找不到答案。对我来说,ANR分析尚不清楚。结果,这是我的错-在onResume()中,我使用recreate()if(camera == null)。测试一切正常后,在首次安装后,将请求获得摄像机许可,然后将活动重新启动到无穷大。编辑代码后,此错误减少到几乎为零。您必须在代码中搜索错误。