Android DeadSystemException

86

Obecnie mamy do DeadSystemExceptionczynienia z raportowaniem awarii w HockeyApp. Występuje w systemie Android 7.0 i Android 7.1. Nie mamy tego wyjątku w poprzedniej wersji naszej aplikacji (obecnie są one używane przez użytkowników), więc myślę, że ten wyjątek jest spowodowany pewną zmianą kodu. Ale ślad stosu nie jest w tym zbyt pomocny. Dowolny pomysł? Dzięki za wszelkie sugestie.

Śledzenie stosu z HockeyApp:

java.lang.RuntimeException: android.os.DeadSystemException
at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3781)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: android.os.DeadSystemException
... 8 more
convexHull
źródło
1
Opublikuj kod i wspomnij o linii kodu, w której występuje wyjątek.
Aishwarya Tiwari
4
powiedziałbym, że to nie jest problem z aplikacją, tak jak w dokumentach: The core Android system has died and is going through a runtime restart. All running apps will be promptly killed.dzieje się to głównie gdzie indziej i wpływa na twoją aplikację?
Yazan,
2
@AishwaryaTiwari Nie jestem w stanie odtworzyć błędu lokalnie - więc nie mogę opublikować żadnego fragmentu kodu. Wszystko, co mam, to ślad stosu z HockeyApp
convexHull
1
To wyjątek rzucony przez Android Framework, przepraszam, że nie mogę ci w tym pomóc.
Aishwarya Tiwari,
1
Jestem zainteresowany, aby sprawdzić, czy komuś udało się odtworzyć awarię. Powtórzone kroki zostaną nagrodzone
David Rawson

Odpowiedzi:

71

Dokumentacja programisty Androida dla android.os.DeadSystemExceptionmówi, co następuje:

Podstawowy system Android zginął i przechodzi proces ponownego uruchamiania. Wszystkie uruchomione aplikacje zostaną natychmiast zabite.

Kod źródłowy nie pomaga znacznie więcej:

package android.os;
/**
 * The core Android system has died and is going through a runtime restart. All
 * running apps will be promptly killed.
 */
public class DeadSystemException extends DeadObjectException {
    public DeadSystemException() {
        super();
    }
}

Ogólnie wygląda na to, że jest to generowane przez system operacyjny i nie ma to nic wspólnego z naszym kodem.

Spojrzenie na javadoc z superklasy DeadObjectExceptionpotwierdza tę teorię:

Obiekt, który wywołujesz, umarł, ponieważ jego proces hostingu już nie istnieje.

Richard Le Mesurier
źródło
Czy to oznacza, że ​​aplikacja próbowała coś zrobić podczas tego wyjątku, a system operacyjny go zatrzymał? Czy jest coś, co moja aplikacja może zrobić, aby tego uniknąć?
programista Androida
Jak rozumiem, nie jest to coś, co możemy naprawić z poziomu aplikacji.
Richard Le Mesurier
16
Więc jedyne, co możemy zrobić, to zignorować to?
programista Androida
2
Ten błąd wynosi 5%, gdy Menedżer powiadomień jest zdefiniowany jako androidx. Gdy jest zdefiniowany jako android% 1. Ten błąd jest zdecydowanie spowodowany klasą Notification Manager. Ale nadal go nie znalazłem.
Trk
1
@Trk Odkryłem, że stało się to podczas próby wyświetlenia powiadomienia. Jak mogę uniknąć tej awarii? próbuj złapać?
EricZhao
27

Jedną z przyczyn był błąd w usłudze powiadomień Androida w wersji 7 i 8.

Było to spowodowane użyciem w powiadomieniach „wzorca wibracji”, który generuje plik ArrayOutOfBoundsException. Prowadzi to do awarii całego systemu i wysłania pliku DeadSystemException.

W celu uzyskania dalszych informacji można zwrócić się do tego medium artykule tutaj .

Vanshaj Daga
źródło
Potwierdza to raport o
blokadzie
13
Ja tego nie kupuję. Widzę wiele zgłoszeń tego wyjątku w App Center i wszystkie dotyczą Androida 10, a nie Androida 7 lub 8.
Justin
1
Zgadzam się z Justinem, widzę wiele z tych problemów pojawiających się na urządzeniach z Androidem API 29 i nie używamy opcji wibracji w kanałach powiadomień.
Hrafn
16
Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException

Ten wyjątek został spowodowany w jednej z aplikacji, które tworzyłem, występował głównie w urządzeniach MI.

Po debugowaniu stwierdziłem, że próbuję uruchomić inną usługę (Powiedz B) w bieżącej usłudze (Powiedz A) z wątku w tle, ale gdy startService(itService)wywołano metodę, usługa A została już zabita.

Jedynym rozwiązaniem, które znalazłem do tej pory, jest sprawdzenie, czy bieżąca usługa A jest uruchomiona, czy nie, przed uruchomieniem innej usługi B. W zależności od implementacji możesz użyć jednego z różnych sposobów, aby sprawdzić, czy usługa działa z tej odpowiedzi .

Shantanu
źródło