2014-01-13 3 views
2

Я не возражаю против того, чтобы приложение было убито ОС Android, я пытаюсь отлаживать, почему приложение перезагружается после того, как его убили в ситуациях с низкой памятью. Я используюКак отлаживать, почему приложение перезагружается

adb shell dumpsys activity processes

Чтобы прочитать «список LRU Process (отсортированный по oom_adj):»

Моя текущая проблема, когда я делаю следующие шаги и прочитать dumpsys после каждого шага.

  • приложение работает

ProC#)13: adj=fore /FA trm= 0 6124:com.thisoldthing (top-activity)

  • приложение закрыто задней кнопки

ProC#20: adj=bak /B trm= 0 6124:com.thisoldthing (started-bg-ui-services)

  • Погиб после запуска stressrobo

ProC#13: adj=svc /B trm=15 8488:com.thisoldthing (started-services)

Теперь приложение не убивается при вводе устройства в ситуации с малым количеством памяти. Больше беспокойства я хочу знать, почему он перезапустился.

+0

Не зная о приложении, трудно сказать, но, похоже, он предоставляет какой-то сервис системе отдельно от графического интерфейса. Что это за приложение? – abiessu

+0

[How] (http://developer.android.com/reference/android/app/Service.html#START_STICKY) вы начали свою службу? – zapl

+0

Он связан в Application.onCreate 'bindService (serviceIntent, mServiceConnection, Context.BIND_AUTO_CREATE);' – TealFawn

ответ

0

Android попытается сохранить ваше обслуживание как можно дольше. documentation of Context.startService() говорит: «Если в процессе службы произойдут какие-либо ошибки, он будет автоматически перезагружен». Мое понимание и опыт позволяют мне поверить, что это произойдет независимо от того, вы начали с startService() или bindService(), но последний не упоминает об этом.

Итак, если вы не хотите, чтобы ваш сервис перезапустился, вам необходимо закрыть связанные соединения, прежде чем убить его. К сожалению, приложение не может полагаться на onDestroy(), вызываемое в условиях убийства, поэтому любые вызовы unbindService() будут зависеть от жизненного цикла приложения. Вам нужно будет справиться с этим самостоятельно.

Наконец, связывание соединений не предназначено для того, чтобы оставаться навсегда. Они должны подключиться, выполнить работу и отвязать. Помня об этом, андроид правильно думает о перезапуске сервисов со связанными соединениями.

Смежные вопросы