2015-08-26 4 views
3

У меня есть служба, запущенная с Activity, сервис работает нормально onCreate, onStartCommand, вызванный должным образом. В настройках -> работает приложение, показывающее его 1 process and 1 service.
Теперь, когда я удалил приложение из недавнего списка приложений. Служба воссоздается. В настройках -> работает приложение показывает 0 process and 1 servicerestarting... И onCreate, onStartCommand, onTaskRemoved.onTaskRemoved вызывается после onCreate в запущенном сервисе при удалении из списка последних приложений

Сейчас этот вопрос находится в одном приложении onTaskRemoved называется сразу после считывания приложения из затем onCreate называется, а в другом приложении onTaskRemoved занимает много времени и окликнул onCreate.

Почему это различное поведение есть? Любое предложение поможет мне. Просьба представить ваши комментарии и замечания.

08-26 15:43:48.611: D/PassiveService(15359): PASS_IVE, onCreate... 
08-26 15:43:48.611: I/PassiveService(15359): PASS_IVE, registerReceivers... 

После салфетки из

08-26 15:44:05.789: D/PassiveService(15499): PASS_IVE, onCreate... 
08-26 15:44:05.809: I/PassiveService(15499): PASS_IVE, registerReceivers... 
08-26 15:44:05.839: I/PassiveService(15499): PASS_IVE, onTaskRemoved... 

ответ

1

Вызов onTaskRemoved запущенного сервиса (когда приложение получает спер из последних приложений) в целом будет отложено если мы выполняем тяжелые вещи, связанные с UI или передача сообщений получателям в услугу.

например, Предположим, вы скачиваете файл размером 50Мб с веб-сервера, поэтому с веб-сервера каждый раз вы читаете 1024bytes данных потока в качестве буфера, и что данные, которые вы пишете в файл устройства.

Тем временем вы обновляете прогресс в потоке пользовательского интерфейса, что означает, что каждый KB, который вы обновляете до потока пользовательского интерфейса, приведет к зависанию приложения.

Итак, если вы удалите последний список приложений, система попытается остановить службу, но поскольку служба находится в контакте с потоком пользовательского интерфейса, система не сможет остановить эту службу, но он создаст новый сервис, хотя старая служба еще не остановлена.

После того, как старая служба завершит связь с потоком пользовательского интерфейса, вызывается onTaskRemoved() и старая служба будет остановлена. Новая служба будет работать в фоновом режиме.