web-dev-qa-db-fra.com

Comment résoudre le problème ANR sur /data/app/com.Android.chrome-1/base.apk?

pouvez-vous m'aider avec ce problème d'ANR? Les utilisateurs signalent de nombreuses fois à la console Google Play, mais je ne peux pas le reproduire moi-même. Merci beaucoup.

 "main" prio = 5 tid = 1 Native 
 | group = "main" sCount = 1 dsCount = 0 obj = 0x73898658 self = 0xb0204400 
 | sysTid = 3708 Nice = -4 cgrp = défaut sched = 0/0 handle = 0xb2f69534 .__ | state = S schedstat = (5873509009 1942619080 10289) utm = 484 stm = 102 core = 3 HZ = 100 
 | stack = 0xbe00c000-0xbe00e000 stackSize = 8MB 
 | mutex tenus = 
 # 00 pc 00000000000174d4 /system/lib/libc.so (appel système + 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 (???) 
 à org.chromium.ui.base.WindowAndroid.nativeOnVSync (méthode native) 
 à org.chromium.ui.base.WindowAndroid.access 700 $ (WindowAndroid.Java:134)
 à org.chromium.ui.base.WindowAndroid $ 1.onVSync $ 5166USJ75THMGSJFDLKNAR9FELKIULIJF5N66JBFDPKN8RRI7D52ILG_0 (WindowAndroid.Java:16)
 à org.chromium.ui.VSyncMonitor $ 1.doFrame (VSyncMonitor.Java:22)
 sur Android.view.Choreographer $ CallbackRecord.run (Choreographer.Java:872)
 sur Android.view.Choreographer.doCallbacks (Choreographer.Java:686)
 sur Android.view.Choreographer.doFrame (Choreographer.Java:618)
 sur Android.view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.Java:860)
 sur Android.os.Handler.handleCallback (Handler.Java:751)
 sur Android.os.Handler.dispatchMessage (Handler.Java:95)
 sur Android.os.Looper.loop (Looper.Java:154)
 sur Android.app.ActivityThread.main (ActivityThread.Java:6165)
 à Java.lang.reflect.Method.invoke! (Méthode native) 
 sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:888)
 à com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:778)
5
iForests

"ANR" signifie "Application ne répond pas". Cela signifie que votre application est verrouillée pour l'utilisateur. Il y a généralement une des deux causes:

  • vous avez une impasse
  • vous effectuez une opération lente sur le thread d'interface utilisateur, ce qui signifie que votre interface utilisateur ne répond pas

Dans ce cas, nous voyons que le haut de la trace de la pile se trouve dans "org.chromium.ui.base.WindowAndroid.nativeOnVSync". Il est utile de savoir que "chrome" est le projet open source qui alimente Google Chrome, entre autres choses. Cela signifie que vous pouvez aller voir le code source.

Googling "nativeOnVysnc" sur github trouve le code source Java

Fondamentalement, il semble que quelque chose se bloque dans un code de rendu Chrome ..__ Il est utile de savoir à ce stade que Chromium est utilisé pour Webkit, qui est utilisé pour le rendu des fenêtres de vue Web dans les applications Android. Il y a donc des chances que vous ayez une sorte de WebView dans votre application qui se comporte mal pour le rendu, mais je ne peux pas vous aider au-delà. Je vérifiais le javascript de mes vues Web pour voir si de la mémoire était utilisée ou tout autre comportement à risque, ou examinais dans le référentiel Chromium le code C++ natif pour essayer de mieux comprendre ce qui se passait.

6
Nick Fortescue

Il y a peu de choses que vous puissiez faire:

  1. projet git open source appelé ANR-WatchDog . Vous pouvez capturer chaque anr en utilisant quelques étapes très simples . Vous pouvez définir le nombre de secondes que vous considérez être un ANR (par exemple, si vous définissez à 0,5 seconde, vous pourriez attraper l'ANR décrit ci-dessus.
  2. Rechercher Wakelocks dans votre code
  3. Utilisez-vous sqlite (ou toute autre bibliothèque de base de données)? Si c'est le cas, je vérifierais avec l'ANR-Watchdog si l'insertion, la mise à jour, la récupération prend trop de temps. Dans l’ensemble, vérifiez que toutes les requêtes ne bloquent pas trop le thread ui.
1
Dus

J'ai eu le même problème. Mais je pourrais tellement diminuer le nombre d'ANR concernant ce problème.

1. bug de chrome

La version précédente de Chrome comportait un bogue qui ne permettait parfois pas d’écouter les auditeurs VSync . Toutefois, dans la dernière version de chrome, il semble que ce bogue ait été corrigé.

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

2. Admob - UnifiedNativeAdView depuis longtemps

Si votre projet contient des annonces natives AdMob, cela peut être une cause. Il semble que UnifiedNativeAdView utilise VSync en interne, si vous n'appelez pas destroy(), VSync listener reste et fuit, je pense.

0
Mitsuaki Ishimoto

J'ai eu le même problème il y a une semaine. Je n'ai pu trouver de réponse nulle part. L'analyse ANR pour moi n'était pas claire. En conséquence, il s’est avéré que c’est de ma faute - dans onResume () j’ai utilisé recreate () if (camera == null). Lors des tests, tout s'est bien passé et, après la première installation, une demande d'autorisation d'accès à la caméra a été lancée et l'activité a été relancée à l'infini. Après avoir modifié le code, cette erreur a été réduite à presque zéro. Vous devez rechercher une erreur dans votre code.

0
Radium