Android: запуск службы в фоновом режиме навсегда
Я не знаю, почему, но моя служба (начатая с startService (Intent...)) продолжает закрываться через некоторое время. Я хочу, чтобы моя Служба проверяла каждые 2 минуты позицию с помощью WiFiSLAM, поэтому TimerTask работает в Сервисе. Я понял, что моя служба закрывается после закрытия приложения (onDestroy), и экран выключен.
Я читал о WakeLock и пробовал это:
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wakeLock.acquire();
Но это все еще не работает. Я не знаю, что делать. Я просто хочу, чтобы моя Wifi Positioning Framework обновляла позицию в фоновом режиме каждые две минуты.
Я также устанавливаю возвращаемое значение onStartCommand() в START_STICKY. Возможно, он работает в фоновом режиме, но я не вижу Logs в LogCat, когда он работает некоторое время, что дает мне сигналы о том, что innerLocationManager все еще ловит новые позиции.
У кого-то есть идея?
Ответы
Ответ 1
Android автоматически убивает приложения, работающие в фоновом режиме, в течение длительного времени (от 30 минут до 1 часа).
Единственный способ предотвратить это - установить службу foreground service
.
Для этого вы используете следующее:
startForeground(messgae, notification);
Это покажет постоянное уведомление, информирующее пользователя о том, что ваша служба запущена.
Другой вариант - использовать AlarmManager
для запуска IntentService
каждые 2 минуты.
С уважением.
Ответ 2
У меня в прошлом была проблема с ame, и вы можете не захотеть этого делать, однако это работает для меня. Я создал 2 службы, главного рабочего и помощника. Помощник, каждый так часто, будет следить за тем, чтобы рабочий работал, и рабочий обеспечит, чтобы помощник продолжал работать. В этом примере, если один из них может быть убит системой, он будет перезапущен другим. Я никогда их не умирал одновременно.
Опять же, это мое решение, которое может не быть тем, что вы хотели бы сделать.
Ответ 3
Одним из решений является использование сигнала тревоги, который запускает вашу службу с двухминутными интервалами или независимо от того, что вы решите. Однако при этом батарея разряжается, поэтому помните об этом.