Android DeadSystemException
В настоящее время мы испытываем 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
Документация разработчика 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
, поддерживает эту теорию вверх:
Объект, который вы вызываете, умер, потому что его хостинг-процесс не дольше.
Ответ 2
Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException
Это исключение было вызвано в одном из приложений, которые я разрабатывал, это происходило в основном на устройствах MI.
После отладки я обнаружил, что пытался запустить другую службу (Say B) в текущей службе (Say A) из фонового потока, но когда был вызван метод startService(itService)
, служба A уже была убита.
Единственное решение, которое я нашел до сих пор, - проверить, работает ли текущая служба A или нет, прежде чем запускать другую службу B. В зависимости от вашей реализации вы можете использовать один из способов проверки работы служб с этот ответ.
Ответ 3
Одной из причин была ошибка в службе уведомлений Android версии 7 и 8.
Это было вызвано использованием "шаблона вибрации" в уведомлениях, который вызывает ArrayOutOfBoundsException
. Это приводит к краху всей системы и публикации DeadSystemException
.
Для получения дополнительной информации вы можете обратиться к этой средней статье здесь.