Служба Android работает бесконечно - PullRequest
1 голос
/ 05 июля 2011

Я замечаю, что такие приложения, как Skype, используют службу, которая в основном работает 24x7, не будучи убитой вообще.Вы даже не можете вручную убить его с помощью убийц задач (вы можете убить их, перейдя в запущенные службы и уничтожив службы).Как это реализовано?

Я обнаружил, что в Android 2.3 мой сервис отключается после некоторого запуска.onDestroy () никогда не вызывается, даже если я запускаю службу с START_STICKY.Однако это работает нормально на моем устройстве 2.1, то есть служба не убивается.

Спасибо

1 Ответ

3 голосов
/ 05 июля 2011

Как это реализовано?

На основании снимков экрана Skype, которые показывают значок Notification, они, скорее всего, используют startForeground().

Я обнаружил, что в Android 2.3 мой сервис отключается после некоторого запуска.

Это совершенно нормально.

Во-первых, большинству приложений Android на самом деле не нужен сервис, который "в основном работает 24x7". Пользователям не нравятся такие сервисы, поэтому в ОС существуют средства запуска задач, экран «Запущенные сервисы» и логика автоматического уничтожения. Единственная причина, по которой служба должна работать "24x7", это если она доставляет значение каждую микросекунду. Клиенты VOIP, такие как Skype, будут предоставлять ценность каждую микросекунду, так как они ожидают входящих телефонных звонков. Большинство приложений Android не соответствуют этому критерию.

Если ваша служба работает постоянно, но в течение периода, управляемого пользователем (например, музыкальный проигрыватель), startForeground() является хорошим решением.

В противном случае, я бы предпочел, чтобы вы нашли способ исключить службу, которая "в основном работает 24x7", переключившись на управляемую пользователем систему опроса, используя AlarmManager, так что ваша служба обычно не находится в памяти, за исключением случаев, когда она доставляет значение. * * тысяча двадцать-одна

...