Какой лучший метод для вызова определенной функции в определенное время, планировщик заданий или диспетчер аварий - PullRequest
0 голосов
/ 10 мая 2018

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

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

Вот правильный метод для планирования тревоги.

public static void startAlarm(Context context, int minutes) {
        Logger.print("AlarmReceiver startAlarm  called");
        Intent alarmIntent = new Intent(context, WakefulBroadcastReceiverService.class);
        alarmIntent.setAction("testAPP");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        manager.cancel(pendingIntent);
        long alarmPeriodicTime = System.currentTimeMillis() + Utils.getTimeInMilliSec(Constant.TimeType.MINUTE, minutes);
        if (Build.VERSION.SDK_INT >= 23) {
            manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else if (Build.VERSION.SDK_INT >= 19) {
            manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else {
            manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        }
    }

Для пользователя планировщика заданий используйте диспетчер FirebaseJob для поддержки более низкой версии

0 голосов
/ 10 мая 2018

Вы должны AlarmManager. У тебя не будет такого контроля с Jobscheduler. Запланированные задания в JobScheduler будут выполняться на основе критериев, определенных ОС, на которые вы не можете повлиять. Если ваш вариант использования требует выполнения в определенное время, то AlarmManager должен быть вашим выбором.

На основании документации :

Стандартные тревоги AlarmManager (включая setExact () и setWindow ()) отложены до следующего окна обслуживания.

  • Если вам нужно установить сигналы тревоги, которые срабатывают в режиме ожидания, используйте setAndAllowWhileIdle () или setExactAndAllowWhileIdle ().
  • Сигналы тревоги, установленные с помощью setAlarmClock (), продолжают срабатывать в обычном режиме - система выходит из режима Doze незадолго до срабатывания этих сигналов тревоги.
...