Разработка Android: убить сервис - PullRequest
1 голос
/ 03 июля 2011

У меня запущен сервис.Но когда диспетчер задач завершает работу Activivty, запускающего службу, служба уничтожается.

Почему моя служба уничтожается, когда диспетчер задач завершает работу, а не служба?

Ответы [ 2 ]

1 голос
/ 03 июля 2011

В Android нет "менеджера задач", по крайней мере, с таким именем.

Если вы используете Android 2.1 или более раннюю версию, сторонние приложения, которые называют себя «диспетчерами задач» или «убийцами задач», могут прервать весь ваш процесс, и, более того, избавиться от вашей службы.

Если вы работаете под управлением Android 2.2 или новее, а роль «диспетчеров задач» несколько снижена, приложение «Настройки» в ОС позволяет пользователям принудительно останавливать любое приложение или отдельную службу.

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

В результате опытные разработчики создают свои приложения, чтобы избежать длительных сервисов. Например, если вы проверяете что-то в Интернете (например, на новую электронную почту) каждые 15 минут, а не постоянно запускаете службу, используйте AlarmManager для запуска службы каждые 15 минут и остановите эту службу Сам после того, как интернет-проверка завершена. Это дает вам ту же функциональность, но большую часть времени вам не хватает памяти.

0 голосов
/ 03 июля 2011

Дополнение к CommonsWare: если единственная причина существования вашей Службы заключалась в том, что она была связана с действием, то когда эта деятельность прекращается, больше нет причины для существования службы, поэтому она может быть уничтожена.

(Я думаю, в связанных службах здесь! http://developer.android.com/guide/topics/fundamentals/services.html)

Обновление

Исходя из вашего комментария, я вижу, что вы используете "Запущенный" сервис. В этом случае я рекомендую вам реализовать сервис в отдельном классе, а не как внутренний класс в классе Activity. Это может быть причиной вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...