web-dev-qa-db-ja.com

Android ActivityThread.reportSizeConfigurationsにより、アプリが黒い画面でフリーズしてクラッシュする

アプリがクラッシュしました。多くのユーザーとActivityThread.JavaメソッドreportSizeConfigurationsの複数の場所で発生します。これが何のために使われているのか、なぜフリーズするのかはわかりません。

フリーズは、スプラッシュスクリーンの直後(メインアクティビティが開始されたとき)に発生し、アプリのアップグレード時にのみ発生します。アプリケーションを再インストールすると、問題はなくなります。問題は、すべてのユーザーにアプリケーションを再インストールするように指示できないことです...

誰がこれを引き起こしているのか、そしてその理由を知っていますか?何らかのDB処理に関連しているようですが、それは単なる推測です。

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)

Playストアの「ANRとクラッシュ」のスタックトレースは次のとおりです。

    "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)

さらに情報が必要かどうか教えてください

35
Otziii

クラッシュは、アクティビティを開始する前のサービスのANRが原因です。

ユーザーがサービスで長時間実行されているタスク中にアプリを起動した場合、アクティビティはサービス上のタスクが完了するまで作成されません。この待機は、アプリを起動するユーザーには奇妙に見えるかもしれません。そして、タスクスイッチャーでアプリをスワイプします。これにより、ActivityManagerからタスクレコードが削除されます(ただし、プロセスは現在も有効です)。

サービスで長時間実行されているタスクが最終的に戻ると、アクティビティの起動のブロックが解除されますが、この時点でアクティビティはActivityRecord not found例外は既に削除されているためです。

次のシーケンス図は、クラッシュをより良く説明するかもしれません。 enter image description here

クレジットは、最初に この投稿 で問題を調査したYogiAiに送られます。

51
Ian Wong

Googleで開かれたバグがあり、アプリのアップグレードに関するSamsung限定のようです

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

3
Chrispix

この問題の原因の1つは、メモリリークです。 Houdeの blog では、EventBusを使用してイベントを受信して​​アクティビティを閉じるアプリを作成し、イベントはメモリリークが原因の内部クラスを作成していました。

メモリリークは、起動ではなく再起動のアクティビティを引き起こします。それは彼の言葉で問題を引き起こします。

別の 問題 は、アクティビティの一時停止/停止/破棄タイムアウトです。それは同じにつながる可能性があります

1
user1269737