Что лучше между AlarmManager и Handler+WakeLock?
Я использую для своей службы Android обработчик, который повторяет некоторые операции каждые 60 минут (1 час) с PartialWakeLock, чтобы телефон не спал. Но это вызывает много использования батареи.
Поэтому я решил изучить AlarmManager (я нуб), который кто-то написал здесь, чтобы быть идеальным для такого рода вещей..
Но теперь, читая в Интернете, я обнаружил, что, кто использует AlarmManager, все еще нужен WakeLock. Это правда?
Каков наилучший способ проводить цикл каждые 60 минут (1 час), не убивая батарею?
Thanx
PS
AlarmManager Android Developer
Диспетчер аварийных сигналов удерживает активную блокировку ЦП, пока выполняется метод onReceive() приемника аварийных сигналов. Это гарантирует, что телефон не будет спать, пока вы не закончили обработку трансляции. Как только функция onReceive() возвращается, диспетчер тревог снимает эту пробужденную блокировку. Это означает, что телефон в некоторых случаях будет спать, как только ваш метод onReceive() завершится. Если ваш приемник тревоги называется Context.startService(), возможно, что телефон будет находиться в спящем режиме до запуска запрошенной службы. Чтобы предотвратить это, вашему BroadcastReceiver и Сервису потребуется реализовать отдельную политику блокировки пробуждения, чтобы телефон продолжал работать до тех пор, пока сервис не станет доступным.
Но так кажется, что мне нужно 2 wakelock против всего 1 wakelock с помощью обработчика.... это правда?
3 ответа
Я сделал много тестов, и это результат:
- Диспетчер будильника экономит больше батареи, чем использование обработчика + wakelock для длительной работы по времени.
Но вы должны использовать дополнительную блокировку пробуждения для вашей активности / службы, запущенной сигналом тревоги, потому что блокировка пробуждения диспетчера тревоги не покрывает ее.
Даже в этом методе используется два WakeLock, аккумулятор кажется более эффективным и с большим сроком службы! Во время тестов (2 дня) Alarm Manager использует в 6 раз меньше батареи, чем другие методы. В моем собственном случае...
Надеюсь, что это может помочь кому-то!
Я не уверен, что это все еще актуально,
но ответ таков: использование AlarmManager является предпочтительным. Вам нужен только WakeLock, чтобы телефон продолжал работать после того, как AlarmManager разбудил его, чтобы отправить Намерение на приемник и до тех пор, пока сервис не завершит свою работу. Таким образом, телефон проснется только на пару миллисекунд, по сравнению с "все время".
Я предлагаю вам использовать AlarmManager для обработки событий с интервалом в 1 час.
Поскольку мы не знаем точно, что вы хотите достичь, мы не можем дать более глубокий ответ / предложение извините.