2015-03-05 2 views
0

У меня есть служба, которая работает все время, и мне нужно получить информацию с моего сервера 2 раза в день. Должен ли я использовать обработчик с задержкой 12 Гц? или сигнал тревоги?обработчик или будильник в службе android?

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

Спасибо!

ответ

1

AlarmManager был разработан для такого рода задач. Он позволяет устанавливать неточные сигналы тревоги, которые Android будет группировать с другими задачами, чтобы минимизировать стоимость батареи, связанную с пробуждением устройства. Если вам необходимо точно опробовать сервер в определенное время (и он не может дождаться, когда пользователь начнет работу с устройством), вы можете установить точный сигнал тревоги, который пробудит устройство, а затем вы можете получить метод, который будет автоматизировать создание еще одного точного сигнала тревоги, который планируется выполнить через 12 часов.

Недостаток с AlarmManager заключается в том, что служба не будет автоматически перезагружаться, если устройство выключится и затем снова включится. В этом случае вы можете обойти это, если BroadcastReceiver прослушивает ACTION_BOOT_COMPLETE. Android 5.0 также предоставляет API JobScheduler, который может выполнять задания путем перезагрузки системы.

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

+0

Можете ли вы привести пример или код фрагмента? Спасибо! – AuTi

+0

Здесь вы идете .. https://github.com/ucsunil/android-todo/blob/master/app/src/main/java/com/android/application/services/TaskNotifyService.java. Это фрагмент кода очень плохо разработанного приложения, которое я когда-то работал, когда-то на практике. Он в основном устанавливает будильник, когда пользователь сохраняет задание. Вы можете использовать эту модель для составления графика exactAlarms(). – ucsunil

+0

По какой-то причине я что-то делаю плохо. Потому что я не могу запустить alarmManager или делать что-либо .. это моя работа: AlarmManager manager = (AlarmManager) getApplicationContext(). GetSystemService (Context.ALARM_SERVICE); Intent intent = new Intent (getApplicationContext(), ** ActivateActivity.class **); intent.setAction («Уведомление»); PendingIntent pi = PendingIntent.getBroadcast (getApplicationContext(), 0, намерение, PendingIntent.FLAG_UPDATE_CURRENT); \t \t manager.set (AlarmManager.RTC, AlarmManager.INTERVAL_HALF_DAY, pi); – AuTi

0

Тревога, вероятно, лучше - если приложение будет убито для памяти, в системе все равно будет сигнал тревоги. Обработчика не будет. Обработчики лучше всего подходят для коротких (несколько секунд) задержек.

+0

Можете ли вы привести пример или код фрагмента? Спасибо! – AuTi