Android-устройство периодически перезагружается
Мы тестируем наше приложение для Android на реальных устройствах и замечаем, что некоторые из них периодически перезагружаются после 2-3 часов работы приложения. Приложение состоит из одного сервиса с 3 потоками (с GPS и сетью) и двумя видами деятельности, один из которых является ресурсоемким (отображает карту)
Logcat не помог, так как мы не видели никаких важных сообщений перед перезагрузкой устройства. Иногда устройство даже не запускается, только снятие батареи помогает запустить его снова.
Устройства являются основано на различном оборудовании, произведенном в разных странах (в основном КНР, хе-хе) и использующем разные версии Android.
Каковы наиболее распространенные проблемы, которые могут привести к перезагрузке устройства, и как это можно отладить?
4 ответов:
В Android есть два вида перезагрузки:
Ошибка системного сервера. В этом случае перезагрузка не происходит, но
Zygoteперезапускается. Общие причины:
- сторожевой пес убил процесс system_server из-за тупика в запущенных им службах.
Фатальное исключение произошло в одном из системных сервисов. Однако фактической причиной иногда может быть проблема с оборудованием. Например, в некоторых случаях после сброса настроекext2разделы не форматируются следующим образом. Оно приводит к ошибкам и/data/раздел монтируется как только для чтения, что приводит к куче ошибок.- в редких случаях watchdog может быть тайм-аут из-за высокой загрузки памяти и процессора.
Оба довольно редки и могут быть воспроизведены в основном в тестировании на обезьянах, а не в реальных сценариях. Вы можете увидеть пример вывода logcat, убив процессservice_managerс помощьюadb shell.Паника ядра. В этом случае устройство фактически перезагружается. Как паника ядра происходит на слое превышает Android, он не будет производить никакого вывода logcat. Вместо этого он запишет трассировку стека в консоль. Вы можете прочитать его из
/dev/kmsgили из оболочки ADB:adb shell dmesg.К сожалению, их трудно прочитать, так как на большинстве устройств вывод консоли отключен, а буфер
kmsgбудет стираться при каждой перезагрузке.P. S. Также перезагрузки могут быть вызваны проблемами с оборудованием. В этом случае вряд ли удастся найти какие-либо следы, но, надеюсь, это должно быть воспроизведено только на конкретных устройствах.
У меня была аналогичная проблема (также gps и сеть) я забыл установить таймер обновления сети на производство (15 минут), поэтому устройство обновляется каждые 15 секунд любым способом устройство перегревается soner или позже (htc desire)
Попробуйте свести к минимуму использование процессора ( профилирование) или обеспечить надлежащий механизм охлаждения
Судя по предоставленной Вами информации, вы, скорее всего, сливаете
Thread. Вы можете использовать DDMS для анализаиспользования потоков в ходе выполнения вашего приложения. Другая возможность заключается в том, что у вас просто заканчивается память... вы также можете использовать DDMS, чтобы помочь вам в этом.
Это, скорее всего, проблема перегрева, когда GPS-приемник включен. Выключив GPS и получив местоположение из сотовой сети, приложение продолжает работать бесперебойно в течение нескольких часов.
Спасибо всем за ответы и идеи!
Comments