Android DeadSystemException


87

Наразі ми спостерігаємо повідомлення про DeadSystemExceptionзбої в HockeyApp. Це відбувається на Android 7.0 та Android 7.1. Ми не відчуваємо цього винятку в попередній версії нашої програми (в даний час обидва вони використовуються користувачами), тому, я думаю, цей виняток спричинений деякими змінами коду. Але трасування стека не дуже корисне для цього. Будь-яка ідея? Дякуємо за будь-які пропозиції.

Трасування стека від 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

1
Будь ласка, опублікуйте код та згадайте рядок коду, де відбувається виняток.
Айшварія Тіварі

4
я б сказав, що це не проблема вашого додатка, як у документах: The core Android system has died and is going through a runtime restart. All running apps will be promptly killed.це здебільшого відбувається десь ще і впливає на вашу програму?
Язан

2
@AishwaryaTiwari Я не можу відтворити помилку локально - тому я не можу розмістити будь-який фрагмент коду. Все, що я маю, - це стек стеку від HockeyApp
опуклийХул

1
Це виняток, створений Android Framework, на жаль, я не можу вам у цьому допомогти.
Айшварія Тіварі

1
Мене цікавить, чи хтось зміг відтворити аварію. Кроки
Девід Роусон,

Відповіді:


71

Документи розробника Android android.os.DeadSystemExceptionговорять про наступне:

Основна система Android померла і переживає час перезапуску. Усі запущені програми будуть негайно вбиті.

Вихідний код не допомагає набагато більше:

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();
    }
}

Загалом, схоже, це викидається ОС і не має нічого спільного з нашим кодом.

Дивлячись на javadoc із суперкласу, підтверджує DeadObjectExceptionцю теорію:

Об’єкт, до якого ви телефонуєте, загинув, оскільки його процес розміщення більше не існує.


Це означає, що програма намагалася щось зробити під час цього винятку, і ОС зупинила це? Чи може щось зробити мій додаток, щоб уникнути цього?
розробник android

Як я розумію, це не те, що ми можемо виправити за допомогою програми.
Річард Ле

16
Тож єдине, що ми можемо зробити, це просто ігнорувати це?
розробник android

2
Ця помилка становить 5%, коли Notification Manager визначено як androidx. Коли Android визначається як% 1. Ця помилка, безумовно, пов’язана з класом Notification Manager для мене. Але я все ще не знайшов.
Trk

1
@Trk Я виявив, що це сталося під час спроби показати сповіщення. Як я можу уникнути цієї аварії? спробувати зловити?
EricZhao

28

Однією з причин стала помилка служби сповіщень Android версій 7 та 8.

Це було викликано використанням "вібрації" в сповіщеннях, яка видає ArrayOutOfBoundsException. Це призводить до збою всієї системи та розміщення DeadSystemException.

Для отримання додаткової інформації ви можете ознайомитись із цією статтею для засобу інформації тут .


Звітування про блокування підтверджує вас
Trk,

13
Я його не купую. Я бачу багато звітів про цей виняток в App Center, і всі вони мають Android 10, а не Android 7 або 8.
Джастін,

1
Я погоджуюся з Джастіном, я бачу, як багато цих проблем виникають із пристроями під управлінням Android API 29, і ми не використовуємо опцію вібрації в каналах сповіщень.
Графн,

16
Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException

Цей виняток був спричинений в одній із програм, яку я розробляв, переважно на пристроях MI.

Після налагодження я виявив, що намагався запустити іншу службу (Say B) у поточній службі (Say A) з фонового потоку, але коли startService(itService)метод був названий, служба A вже була вбита.

Єдине рішення, яке я знайшов дотепер, - це перевірити, чи працює поточна служба А чи ні, перед тим, як запустити іншу службу В. Залежно від вашої реалізації ви можете скористатися одним із різних способів перевірити, чи працює служба за цією відповіддю .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.