Android DeadSystemException

86

В настоящее время 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
convxHull
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%, если диспетчер уведомлений определен как androidx. При определении как android% 1 - это. Эта ошибка определенно связана с классом диспетчера уведомлений для меня. Но я так и не нашел.
Trk
1
@Trk Я обнаружил, что это произошло при попытке показать уведомление. Как я могу избежать этого сбоя? попробуй поймать?
EricZhao
27

Одной из причин была ошибка в службе уведомлений Android версий 7 и 8.

Это было вызвано использованием в уведомлениях "шаблона вибрации", который вызывает ошибку ArrayOutOfBoundsException. Это приводит к сбою всей системы и публикацииDeadSystemException .

Для получения дополнительной информации вы можете обратиться к этой статье Medium здесь .

Ваншадж Дага
источник
Trk
13
Я не куплюсь на это. Я вижу много сообщений об этом исключении в Центре приложений, и все они связаны с Android 10, а не с Android 7 или 8.
Джастин,
1
Я согласен с Джастином, я вижу, что многие из этих проблем возникают на устройствах с Android API 29, и мы не используем параметр вибрации в каналах уведомлений.
Hrafn
16
Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException

Это исключение было вызвано одним из приложений, которые я разрабатывал, в основном это происходило на устройствах MI.

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

Единственное решение, которое я нашел до сих пор, - это проверить, запущена ли текущая служба A или нет, прежде чем запускать другую службу B. В зависимости от вашей реализации вы можете использовать один из различных способов проверить, запущены ли службы из этого ответа .

Шантану
источник