69

I have a crash in my app. It happens for a lot of users and its multiple places in ActivityThread.java method reportSizeConfigurations. I dont know what this is used for, and why it freezes.

The freeze happens right after the splash screen (when the main activity is started) and is only happening on upgrading of the app. If you reinstall the application the problem goes away. Problem is, I cant tell all the users to reinstall the application...

Does anyone know what might cause this and why? It seems maybe to be connected with some DB handling, but thats just a guess.

Heres the stacktrace from 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)

Heres the stacktrace from 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)

Please tell if you need more info

Otziii
  • 2,304
  • 1
  • 25
  • 34
  • Seems like its connected to database I/O in the main thread. I have never had this problem before, but maybe something has changed... – Otziii Sep 19 '17 at 21:05
  • My fix was to delete and re-intanceiate the database. An ugly fix, but it worked. Seemed like a lot of the users got corrupt databases with the release. Why, I have no idea... – Otziii Oct 02 '17 at 08:03

3 Answers3

90

The crash is caused by the ANR on your Service, prior to the launch of your Activity.

If a user launches your app during a long-running task in your Service, the Activity will not be created until the task on the service finishes. This waiting might look bizarre to the user launching your app, and they then swipe your app away in the task switcher, which removes the task record from the ActivityManager (but process is still kept alive at this time).

When the long-running task on the service finally returns, it unblocks the activity from launching, but at this time the activity will throw ActivityRecord not found exception because it was removed already.

The following sequence diagram might explain the crash better.enter image description here

Credit goes to YogiAi, who originally investigated the issue in this post.

Mike Laren
  • 8,028
  • 17
  • 51
  • 70
Ian Wong
  • 1,617
  • 14
  • 11
  • I dont think this was the problem in my case. If you just waited for a long time, the app crashed. Even though you did not "kill" or "swipe" the application. Reinitiate the DB worked, so somehow the DB got corrupt, and when I tried to access it, the app froze and crashed. I dont know why... – Otziii Jan 24 '18 at 12:54
  • the shared post need fees to read the full article, not helping much. – hjchin Jun 27 '18 at 00:38
  • I can't open the link. is there any experience resolving this issue? – philipp Jul 12 '18 at 19:12
  • Can the problem appear if I call `finish()` in activity's `onCreate()`? – Artem Mostyaev Sep 24 '18 at 07:13
  • @ArtemMostyaev It should work fine to call finish() in onCreate() – Otziii Sep 25 '18 at 12:10
  • 1
    So this problem existed and now it's not? Or what? There is no workaround? Seems it's at least till Android 9... – android developer Oct 13 '20 at 10:45
16

There is a bug opened with Google, seems exclusive to Samsung on app upgrades

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

Chrispix
  • 17,941
  • 20
  • 62
  • 70
4

One of reasons of this problem can be - memory leak. In Houde's blog he writes the app that uses EventBus to receive the event to close the Activity, and an Event was writing an internal class, that caused by a memory leak.

Memory leak causes activity not no launch but relaunch. That causes problem by his words.

Another problem could be Activity pause/stop/destroy timeout. It can lead to the same

StepanM
  • 4,222
  • 1
  • 21
  • 25