2017-09-19 63 views
6

Mam awarię w mojej aplikacji. Dzieje się tak w przypadku wielu użytkowników i ich wielu miejsc w metodzie ActivityThread.java reportSizeConfigurations. Nie wiem, do czego to służy i dlaczego się zawiesza.Android ActivityThread.reportSizeConfigurations powoduje zatrzymanie aplikacji na czarnym ekranie, a następnie awarię.

Zamrożenie następuje zaraz po ekranie powitalnym (gdy główne działanie jest uruchamiane) i dzieje się tylko podczas uaktualniania aplikacji. Jeśli ponownie zainstalujesz aplikację, problem zniknie. Problem polega na tym, że nie mogę powiedzieć wszystkim użytkownikom, aby ponownie zainstalowali aplikację ...

Czy ktoś wie, co może spowodować to i dlaczego? Wygląda na to, że być może wiąże się to z obsługą DB, ale to tylko domysły.

Herezje StackTrace z 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) 

Herezje StackTrace od 'ANR & wywala' Sklepie Play:

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

Proszę powiedzieć, jeśli potrzebujesz więcej informacji

+0

Wygląda na to, że jest podłączony do bazy danych we/wy w głównym wątku. Nigdy wcześniej nie miałem tego problemu, ale może coś się zmieniło ... – Otziii

+0

Moja poprawka polegała na usunięciu i ponownym powiększeniu bazy danych. Brzydka poprawka, ale zadziałało. Wydawało się, że wielu użytkowników ma uszkodzone bazy danych z wydaniem. Dlaczego, nie mam pojęcia ... – Otziii

Odpowiedz

5

Katastrofa jest spowodowane przez ANR w Twojej usłudze, przed uruchomieniem Twojej działalności.

Jeśli użytkownik uruchomi aplikację podczas długotrwałego działania, usługa nie zostanie utworzona, dopóki nie zakończy się zadanie w usłudze. To oczekiwanie może wydawać się dziwne dla użytkownika uruchamiającego twoją aplikację, a następnie przesuwa aplikację w narzędziu do przełączania zadań, co powoduje usunięcie rekordu zadania z ActivityManager (ale proces ten jest nadal utrzymywany w tym momencie).

Gdy długo działające zadanie w usłudze wraca ostatecznie, odblokowuje aktywność od uruchomienia, ale w tym momencie działanie spowoduje zgłoszenie wyjątku ActivityRecord not found, ponieważ zostało już usunięte.

Poniższy diagram sekwencji może lepiej wyjaśnić zderzenie. enter image description here

Kredyt trafił do YogiAi, który pierwotnie zbadał sprawę w numerze this post.

+0

Nie sądzę, że to był problem w moim przypadku. Jeśli po prostu czekałeś przez długi czas, aplikacja się zawiesiła. Nawet jeśli nie "zabiłeś" ani "przesunąłeś" aplikacji. Ponownie zainicjuj pracę DB, więc jakoś DB się zepsuł, a kiedy próbowałem uzyskać do niego dostęp, aplikacja zawiesiła się i uległa awarii. Nie wiem, dlaczego ... – Otziii