哪一种在特定时间调用特定功能的最佳方法,作业调度程序或警报管理器
Which one best method for call a specific function at specific time , Job scheduler or alarm manager
我正在与硬件通信蓝牙设备。我想在特定时间将数据发送到蓝牙模块,这是安排呼叫功能的最佳方法,我应该使用警报管理器或作业调度程序。
您应该使用 AlarmManager。您将无法使用 Jobscheduler 进行控制。 JobScheduler 中的计划作业将根据您无法影响的 OS 定义的标准执行。如果您的用例需要在特定时间执行,那么 AlarmManager 应该是您的选择。
Standard AlarmManager alarms (including setExact() and setWindow())
are deferred to the next maintenance window.
- If you need to set alarms that fire while in Doze, use setAndAllowWhileIdle() or setExactAndAllowWhileIdle().
- Alarms set with setAlarmClock() continue to fire normally — the system exits Doze shortly before those alarms fire.
这取决于你的任务,如果你想在应用程序被杀死时执行任务并且设备处于 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);
}
}
Job Scheduler 用户请使用 FirebaseJob dispatcher 以获得低版本支持
我正在与硬件通信蓝牙设备。我想在特定时间将数据发送到蓝牙模块,这是安排呼叫功能的最佳方法,我应该使用警报管理器或作业调度程序。
您应该使用 AlarmManager。您将无法使用 Jobscheduler 进行控制。 JobScheduler 中的计划作业将根据您无法影响的 OS 定义的标准执行。如果您的用例需要在特定时间执行,那么 AlarmManager 应该是您的选择。
Standard AlarmManager alarms (including setExact() and setWindow()) are deferred to the next maintenance window.
- If you need to set alarms that fire while in Doze, use setAndAllowWhileIdle() or setExactAndAllowWhileIdle().
- Alarms set with setAlarmClock() continue to fire normally — the system exits Doze shortly before those alarms fire.
这取决于你的任务,如果你想在应用程序被杀死时执行任务并且设备处于 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);
}
}
Job Scheduler 用户请使用 FirebaseJob dispatcher 以获得低版本支持