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

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