web-dev-qa-db-fra.com

Android ActivityThread.reportSizeConfigurations provoque le blocage de l'application avec l'écran noir, puis le blocage

J'ai un crash dans mon application. Cela se produit pour de nombreux utilisateurs et ses multiples emplacements dans la méthode ActivityThread.Java reportSizeConfigurations. Je ne sais pas à quoi ça sert, et pourquoi ça gèle.

Le gel se produit juste après l'écran de démarrage (lorsque l'activité principale est lancée) et ne se produit que lors de la mise à niveau de l'application. Si vous réinstallez l'application, le problème disparaît. Le problème est que je ne peux pas dire à tous les utilisateurs de réinstaller l'application ...

Est-ce que quelqu'un sait ce qui pourrait causer cela et pourquoi? Il semble peut-être être lié à certaines manipulations de base de données, mais c'est juste une supposition.

Voici le stacktrace de Crashlytics:

Fatal Exception: Java.lang.IllegalArgumentException: reportSizeConfigurations: ActivityRecord not found for: Token{a28a055 null}
   at Android.os.Parcel.readException(Parcel.Java:1697)
   at Android.os.Parcel.readException(Parcel.Java:1646)
   at Android.app.ActivityManagerProxy.reportSizeConfigurations(ActivityManagerNative.Java:8342)
   at Android.app.ActivityThread.reportSizeConfigurations(ActivityThread.Java:3049)
   at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2992)
   at Android.app.ActivityThread.-wrap14(ActivityThread.Java)
   at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1631)
   at Android.os.Handler.dispatchMessage(Handler.Java:102)
   at Android.os.Looper.loop(Looper.Java:154)
   at Android.app.ActivityThread.main(ActivityThread.Java:6682)
   at Java.lang.reflect.Method.invoke(Method.Java)
   at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1520)
   at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1410)

Voici le stacktrace du Play Store 'ANRs & Crashes':

    "main" prio=5 tid=1 TimedWaiting
  | group="main" sCount=1 dsCount=0 obj=0x74864f70 self=0x7f8b896a00
  | sysTid=28578 Nice=0 cgrp=default sched=0/0 handle=0x7f8f832a98
  | state=S schedstat=( 237746089 66838748 1069 ) utm=18 stm=5 core=6 HZ=100
  | stack=0x7fcdbf9000-0x7fcdbfb000 stackSize=8MB
  | held mutexes=

  at Java.lang.Object.wait! (Native method)
- waiting on <0x0c54fb7b> (a Java.lang.Object)
  at Java.lang.Thread.parkFor$ (Thread.Java:2127)
- locked <0x0c54fb7b> (a Java.lang.Object)
  at Sun.misc.Unsafe.park (Unsafe.Java:325)
  at Java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.Java:201)
  at Android.database.sqlite.SQLiteConnectionPool.waitForConnection (SQLiteConnectionPool.Java:670)
  at Android.database.sqlite.SQLiteConnectionPool.acquireConnection (SQLiteConnectionPool.Java:348)
  at Android.database.sqlite.SQLiteSession.acquireConnection (SQLiteSession.Java:894)
  at Android.database.sqlite.SQLiteSession.prepare (SQLiteSession.Java:586)
  at Android.database.sqlite.SQLiteProgram.<init> (SQLiteProgram.Java:58)
  at Android.database.sqlite.SQLiteQuery.<init> (SQLiteQuery.Java:37)
  at Android.database.sqlite.SQLiteDirectCursorDriver.query (SQLiteDirectCursorDriver.Java:44)
  at Android.database.sqlite.SQLiteDatabase.rawQueryWithFactory (SQLiteDatabase.Java:1318)
  at Android.database.sqlite.SQLiteQueryBuilder.query (SQLiteQueryBuilder.Java:399)
  at Android.database.sqlite.SQLiteQueryBuilder.query (SQLiteQueryBuilder.Java:294)
  at com.norwegian.travelassistant.managers.storagemanager.StorageManager.query (StorageManager.Java:1011)
  at com.norwegian.travelassistant.managers.storagemanager.StorageManager.a (StorageManager.Java:1218)
- locked <0x00f0bd98> (a Java.lang.Object)
  at com.norwegian.travelassistant.managers.storagemanager.StorageManager.a (StorageManager.Java:1205)
  at com.norwegian.travelassistant.managers.storagemanager.StorageManager.F (StorageManager.Java:1812)
  at com.norwegian.travelassistant.managers.e.a (LanguageManager.Java:63)
  at com.norwegian.travelassistant.managers.e.a (LanguageManager.Java:84)
  at com.norwegian.travelassistant.tabbar.TabsActivity.onCreate (TabsActivity.Java:141)
  at Android.app.Activity.performCreate (Activity.Java:6705)
  at Android.app.Instrumentation.callActivityOnCreate (Instrumentation.Java:1119)
  at Android.app.ActivityThread.performLaunchActivity (ActivityThread.Java:2664)
  at Android.app.ActivityThread.handleLaunchActivity (ActivityThread.Java:2772)
  at Android.app.ActivityThread.-wrap12 (ActivityThread.Java)
  at Android.app.ActivityThread$H.handleMessage (ActivityThread.Java:1515)
  at Android.os.Handler.dispatchMessage (Handler.Java:102)
  at Android.os.Looper.loop (Looper.Java:241)
  at Android.app.ActivityThread.main (ActivityThread.Java:6217)
  at Java.lang.reflect.Method.invoke! (Native method)
  at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.Java:865)
  at com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:755)

S'il vous plaît dites si vous avez besoin de plus d'informations

35
Otziii

Le crash est causé par l'ANR sur votre service, avant le lancement de votre activité.

Si un utilisateur lance votre application pendant une tâche de longue durée dans votre service, l'activité ne sera pas créée tant que la tâche sur le service ne sera pas terminée. Cette attente peut sembler bizarre à l'utilisateur qui lance votre application, qui la glisse ensuite dans le sélecteur de tâches, ce qui supprime l'enregistrement de tâche du ActivityManager (mais le processus reste actif à ce moment-là).

Lorsque la tâche de longue durée sur le service est finalement de retour, elle débloque le lancement de l'activité, mais à ce moment-là, l'activité jette ActivityRecord not found exception car il a déjà été supprimé.

Le diagramme de séquence suivant pourrait mieux expliquer le crash . enter image description here

Le mérite revient à YogiAi, qui a initialement enquêté sur la question dans cet article .

51
Ian Wong

Il y a un bug ouvert avec Google, semble exclusif à Samsung sur les mises à niveau de l'application

https://issuetracker.google.com/issues/62427912

3
Chrispix

Une des raisons de ce problème peut être - une fuite de mémoire. Dans le blog de Houde, il écrit l'application qui utilise EventBus pour recevoir l'événement afin de fermer l'activité, et un événement écrivait une classe interne, provoquée par une fuite de mémoire.

Une fuite de mémoire provoque une activité non pas un lancement mais un redémarrage. Cela cause problème par ses mots.

Un autre problème pourrait être une pause d'activité/arrêt/destruction. Cela peut conduire au même

1
user1269737