Подтвердить что ты не робот

Процесс Android очень часто вызывает сообщение "скончался".

Я работаю над приложением, которое работает как служба и ждет сообщения. После проверки журнала я обнаружил, что Android убивает и перезапускает много процессов очень часто! Это происходит не только с моим приложением, но и для многих других сервисов.

Я не вижу причин для этого, и у моего устройства достаточно памяти. Я тестирую Sony Xperia S под управлением Android 4.0.4. Это нормально или ошибка?

Вот часть журнала, чтобы показать вам, что я имею в виду:

02-04 15: 02: 38.791 320 332 я ActivityManager: Процесс com.android.email(pid 32763) умер. 02-04 15: 02: 38.791 320 332 W ActivityManager: Планирование перезапуска разбившегося сервиса com.android.email/.service.MailService в 5000 мс

.... и 13 минут спустя:

02-04 15: 15: 32.601 320 694 я ActivityManager: Процесс com.android.email(pid 1453) умер.

4b9b3361

Ответ 1

Это нормально, ОС делает это регулярным.

Почему? Каждое приложение или служба, когда они неактивны или находятся в фоновом режиме, остаются в памяти до тех пор, пока менеджер памяти Android не решит, что он либо занимает слишком много памяти, либо требует другого активного приложения/службы. Например, когда вы нажимаете кнопку home, когда находитесь в своем приложении электронной почты. Он вернется к тому месту, где вы были при повторном открытии приложения. Поскольку это приложение было просто приостановлено и в каком-то режиме спящего режима в памяти. Если Android не должен выделять эту память ни для чего другого, он сохраняет ее там.

Чтобы убедиться, что ОС не убивает вашу службу, создается постоянная служба.

Вы можете сделать свою службу постоянной, если вы разрабатываете системные приложения. Эти службы будут в основном не подлежат уничтожению и будут помечены как "PERS" в выводе команды "Активность dumpsys оболочки adb".

http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/

Но:

Пожалуйста, используйте AlarmManager и IntentService, поэтому ваша служба не должна быть в памяти, кроме случаев, когда она делает значимую работу. Это также означает, что Android вряд ли сможет убить ваш сервис, пока вы находитесь в памяти, и пользователи вряд ли убьют ваш сервис, потому что считают, что вы тратите впустую память.