Подтвердить что ты не робот

Сервис, WakeLock

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

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

  • Что я слышу от этого форума, служба может отключиться, как только устройство засыпает. Это правда? В моем случае это работает всегда, я что-то не хватает?

  • В чем нуждаются WakefulIntentService? Когда нам нужно использовать WakefulIntentService?

  • Я попытался запустить таймер в Service, хотя устройство заблокировано и экран выключен, и мой таймер работает в значительной степени, я могу сказать наверняка. Потому что я получал уведомление, когда мой таймер отключается.

4b9b3361

Ответ 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" />