Сервис, WakeLock
Я немного смущен после прохождения вопросов и ответов в Stackoverflow около WakefulIntentService
. Я просто хотел бы получить некоторые знания по этим темам, чтобы убедиться, что мое понимание верное, пожалуйста, не стесняйтесь исправлять меня, если я ошибаюсь.
Я построил небольшое приложение, в котором я использую фона Service
, который продолжает воспроизводить музыку всякий раз, когда пользователь встряхивает мобильный телефон. Я тестировал, когда устройство заблокировано, и экран выключен, и он работает, как ожидалось.
-
Что я слышу от этого форума, служба может отключиться, как только устройство засыпает. Это правда? В моем случае это работает всегда, я что-то не хватает?
-
В чем нуждаются WakefulIntentService
? Когда нам нужно использовать WakefulIntentService
?
-
Я попытался запустить таймер в Service
, хотя устройство заблокировано и экран выключен, и мой таймер работает в значительной степени, я могу сказать наверняка. Потому что я получал уведомление, когда мой таймер отключается.
Ответы
Ответ 1
Что я слышу на этом форуме, служба может отключиться, как только устройство засыпает. Это правда?
Да.
В моем случае он всегда работает
Тогда что-то еще на вашем устройстве не позволяет устройству засыпать. Возможно, используйте adb shell dumpsys power
, чтобы увидеть, какие WakeLocks
выдающиеся.
Какая потребность в службе WakeFulIntent? Когда нам нужно использовать WakefulIntentService?
Устройство может засыпать, если пользователь неактивен, и ничто не заставляет устройство бодрствовать. A WakeLock
используется для обеспечения готовности устройства к работе. Для транзакционного типа (например, для загрузки файла) WakefulIntentService
объединяет IntentService
и WakeLock
, чтобы поддерживать пробуждение устройства до тех пор, пока это необходимо (и только до тех пор, пока это необходимо) относительно легко.
WakefulIntentService
не подходит для использования с услугами, которые необходимо запускать неограниченно долго, например, музыкальным проигрывателем. Для тех, кто управляет своими WakeLock
.
Ответ 2
Я использовал код ниже в приложении.
Убедитесь, что ваш сервис липкий:
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
//this service will run until we stop it
return START_STICKY;
}
Я хочу, чтобы ваш телефон постоянно бодрствовал, вы можете использовать этот код ниже:
private WakeLock wl;
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "whatever");
wl.acquire();
Не забывайте разрешения в манифесте.
<uses-permission android:name="android.permission.WAKE_LOCK" />