Как сохранить работоспособность службы Android при выключенном экране? - PullRequest
46 голосов
/ 23 мая 2011

Когда экран выключается, служба приложений приостанавливается.

Я запускаю сервис со следующим кодом:

if (mSharedPrefs.getBoolean("prefAutoUpdatesMain", false)) {
     Intent svc = new Intent(this, MyService.class);
     startService(svc);
}

Как мне избежать паузы в обслуживании?


Что мне нужно сделать в MyService, так это загрузить некоторые данные из Интернета. Если я понимаю процесс, которому я должен следовать:

  1. Приобретение wakeLock
  2. Загрузить данные
  3. Выпуск wakeLock

В методе загрузки данных нет ссылки на wakeLock, это приложение, чтобы иметь wakeLock, это правильно?

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

Ответы [ 3 ]

65 голосов
/ 23 мая 2011

Частичный WakeLock - это то, что вы хотите. Он будет держать процессор открытым, даже если экран выключен.

Для приобретения:

PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wakeLock.acquire();

Выпустить:

wakeLock.release();

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

На что нужно обратить внимание:

Если вы используете подсчет ссылок, убедитесь, что все пути управления через ваше приложение будут правильно получать / освобождать ... наконец, блоки пригодятся здесь.

Также обязательно удерживайте WakeLocks нечасто и в течение коротких периодов времени. Они складываются с точки зрения использования батареи. Приобретите замок, займитесь своими делами и отпустите как можно скорее.

3 голосов
/ 23 мая 2011

Вам нужен частичный пробужденный замок.

Подробный пример здесь в предыдущем вопросе:

Wake-Locks android сервис повторяющихся

1 голос
/ 26 ноября 2015

Я просто пользуюсь сервисом Foregrgound.

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