Держите службу запущенной при загрузке, даже если приложение остановлено

Я работаю над приложением, которое во время загрузки запускает действие, которое входит в систему на моем сервере (требуется действие для входа через facebook) с помощью службы (инициируемой с помощью startService). Этот сервис устанавливает прослушиватели XMPP и после этого ничего не делает, просто ждет подключения. Я хочу, чтобы эта служба работала все время, пока устройство включено.

Проблема в том, что активность прекращается через некоторое время, и мой сервис также останавливается. Служба возвращает START_STICKY, поэтому я ожидал, что она будет зависать. Также служба ничего не делает, кроме ожидания подключения.

Активность имеет свойства: android:excludeFromRecents="true" android:noHistory="true" android:launchMode="singleInstance"

чтобы он не отображался в списке задач (когда пользователь долго нажимает кнопку «Домой»).

Действие останавливается, когда пользователь долго нажимает кнопку «Домой», и служба также завершается. Я думаю, что возможно, что приложение завершилось, поэтому служба также заканчивается. Я не мог найти способ предотвратить остановку активности. Возможно, его остановка из-за вышеуказанных свойств.

Итак, что я могу сделать, чтобы служба работала все время. Как я могу сделать так, чтобы приложение не было удалено. Я где-то читал, что если я оставлю цикл while в службе, то START_STICKY сможет сохранить службу?? Я могу использовать AlarmManager для запуска службы, но я не хочу, чтобы она легко останавливалась, а затем каждый раз приходилось перезапускать ее.

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


person user2994098    schedule 05.09.2015    source источник


Ответы (1)


Есть две вещи, чтобы поддерживать работу службы на неопределенный срок; создайте службу с помощью startService() и верните START_STICKY из onStartCommand(). Вы, кажется, делаете это оба. С помощью этих двух шагов система может отключить службу, но она должна перезапуститься почти сразу.

Единственное предложение, которое у меня есть, это создать отдельный поток в сервисе. Это связано с тем, что по умолчанию запущенные службы запускаются в основном потоке приложения. Если служба постоянно выполняет определенную задачу, она может заблокировать основной поток и убить приложение. В документе Google есть пример реализации этого:

http://developer.android.com/guide/components/services.html#ExtendingService

person kmaini    schedule 10.09.2015