web-dev-qa-db-ja.com

/data/app/com.Android.chrome-1/base.apkのANR問題を修正する方法

このANRの問題で私を助けてもらえますか?ユーザーはGoogle Play Consoleに何度も報告しますが、自分では再現できません。どうもありがとう。

 "main" prio = 5 tid = 1ネイティブ
 | 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 
 |保持されたミューテックス= 
#00 pc 00000000000174d4 /system/lib/libc.so(syscall + 28)
#01 pc 0000000000046a5d /system/lib/libc.so(_ZL24__pthread_cond_timedwaitP23pthread_cond_internal_tP15pspec_ktime_mutex_text_mutex_text_mutex8 。]#02 pc 0000000000039bb1 /data/app/com.Android.chrome-1/base.apk(???)
 at org.chromium.ui.base.WindowAndroid.nativeOnVSync(ネイティブメソッド)
 at org.chromium.ui.base.WindowAndroid.access $ 700(WindowAndroid.Java:134)
 at org.chromium.ui.base.WindowAndroid $ 1.onVSync $ 5166USJ75THMGSJFDLKNAR9FELKIULIJF5N66JBFDPKN8RRI7D52ILG_0(Android 
 at org.chromium.ui.VSyncMonitor $ 1.doFrame(VSyncMonitor.Java:22)
 at Android.view.Choreographer $ CallbackRecord.run(Choreographer.Java:872)
 Android.view.Choreographer.doCallbacks(Choreographer.Java:686)
 at Android.view.Choreographer.doFrame(Choreographer.Java:618)
 at Android.view.Choreographer $ FrameDisplayEventReceiver.run (振付師.Ja va: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! (ネイティブメソッド)
 at com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.Java:888)
 at com.Android.internal.os.ZygoteInit.main(ZygoteInit。 Java:778)
8
iForests

「ANR」は「アプリケーションが応答しない」の略です。それはあなたのアプリがユーザーのためにロックされたことを意味します。通常、2つの原因のうちの1つがあります。

  • あなたは行き​​詰まりがある
  • uIスレッドで遅い操作を行っている、つまり、UIが応答しない

この場合、スタックトレースの先頭が「org.chromium.ui.base.WindowAndroid.nativeOnVSync」にあることがわかります。 「クロム」は、とりわけGoogle Chromeを強化するオープンソースプロジェクトであることを知っておくと役に立ちます。つまり、ソースコードを見に行くことができます。

Githubで「nativeOnVysnc」をグーグル検索すると、 Javaソースコード が見つかります

基本的に、何かがChromeレンダリングコード内でロックしているようです。この時点でChromiumがWebkitに使用されていることを知るのに役立ちます。これは、Androidアプリです。おそらく、アプリに何らかのレンダリングが適切に行われていないウェブビューがある可能性がありますが、それ以上はお役に立てません。ウェブビューのJavaScriptをチェックして、メモリ使用量やその他の危険な動作がないか確認します。または、C++ネイティブコードでChromiumリポジトリの内部を調べて、何が起こっているのかをよりよく理解しようとします。

7
Nick Fortescue

同じ問題がありました。しかし、この問題に関するANRを大幅に減らすことができました。

1. Chromiumバグ

以前のバージョンのChromeにはVSyncリスナーをリリースしないバグがありましたが、最新バージョンのchromiumではこのバグが修正されたようです。

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

2. Admob-長期間保持されるUnifiedNativeAdView

プロジェクトにAdMobネイティブ広告がある場合、それが原因である可能性があります。 UnifiedNativeAdViewは内部でVSyncを使用しているようです。destroy()を呼び出さないと、VSyncリスナーが残り、リークすると思います。

1

できることはいくつかあります。

  1. ANR-WatchDog と呼ばれるオープンソースのgitプロジェクト。非常に単純ないくつかのステップを使用して、すべてのanrをキャッチできます。 ANRと見なす秒数を定義できます(たとえば、0.5秒に設定した場合、上記のANRをキャッチする可能性があります。
  2. コードで Wakelocks を検索します
  3. sqlite (またはその他のdbライブラリ)を使用していますか?もしそうなら、挿入、更新、フェッチに時間がかかりすぎる場合は、ANRウォッチドッグを使用して確認します。全体として、すべてのクエリがUIスレッドを長時間ブロックしていないことを確認します。
1
Dus

私は一週間前に同じ問題を抱えていました。どこにも答えが見つかりませんでした。私のANR分析は明確ではありませんでした。その結果、それは私のせいであることが判明しました-onResume()では、(camera == null)の場合、recreate()を使用しました。すべてをテストして問題がなかった場合、最初のインストール後、カメラへの許可の要求があり、アクティビティは無限に再開されました。コードを編集した後、このエラーはほぼゼロになりました。コードのエラーを検索する必要があります。

0
Radium