Java 在特定时间后停止计划程序
我正在尝试在AKKA创建一个调度程序。 要求如下:Java 在特定时间后停止计划程序,java,akka,scheduler,actor,Java,Akka,Scheduler,Actor,我正在尝试在AKKA创建一个调度程序。 要求如下: 每天早上5点开始 每天晚上10点停止 它将每1小时(频率)执行一次作业 我找到了第三点(频率)的解决方案,但无法找到第一点和第二点的解决方案 system.scheduler().schedule(Duration.create(10, TimeUnit.SECONDS), Duration.create(1, TimeUnit.HOURS), actorRef, "Hello", system.dispatcher(), null); 在
system.scheduler().schedule(Duration.create(10, TimeUnit.SECONDS), Duration.create(1, TimeUnit.HOURS), actorRef, "Hello", system.dispatcher(), null);
在上午10点重复此操作,时间段为22英寸。希望它能解决这个问题。//我用它来安排和重复,它工作得很好
// I am using this for scheduling and repeating, it is working fine
//**I am also searching for to Stop Scheduler after Specific Time**
public static void setReminder(Context context, Class<?> cls, int hour, int min, int uniqueAlertID)
{
Calendar calendar = Calendar.getInstance();
Calendar setcalendar = Calendar.getInstance();
setcalendar.set(Calendar.HOUR_OF_DAY, hour);
setcalendar.set(Calendar.MINUTE, min);
setcalendar.set(Calendar.SECOND, 0);
// cancel already scheduled reminders
cancelReminder(context,cls, uniqueAlertID);
if(setcalendar.before(calendar))
setcalendar.add(Calendar.DATE,1);
// Enable a receiver
ComponentName receiver = new ComponentName(context, cls);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Intent intent1 = new Intent(context, cls);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, uniqueAlertID, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, setcalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent);
}
public static void cancelReminder(Context context,Class<?> cls, int uniqueAlertID)
{
// Disable a receiver
ComponentName receiver = new ComponentName(context, cls);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Intent intent1 = new Intent(context, cls);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
uniqueAlertID, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
pendingIntent.cancel();
}
//**我还搜索在特定时间后停止调度程序**
公共静态void setrementer(上下文上下文、类cls、int-hour、int-min、int-uniqueAlertID)
{
日历=Calendar.getInstance();
Calendar setcalendar=Calendar.getInstance();
setcalendar.set(Calendar.HOUR\u OF_DAY,HOUR);
setcalendar.set(Calendar.MINUTE,min);
setcalendar.set(Calendar.SECOND,0);
//取消已安排的提醒
取消提醒(上下文、cls、uniqueAlertID);
如果(设置日历。在(日历)之前)
setcalendar.add(Calendar.DATE,1);
//启用接收器
ComponentName接收器=新的ComponentName(上下文,cls);
PackageManager pm=context.getPackageManager();
pm.setComponentEnabledSetting(接收器、,
PackageManager.COMPONENT\u ENABLED\u STATE\u ENABLED,
PackageManager.Don_KILL_APP);
意向意向1=新意向(上下文,cls);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文、uniqueAlertID、intent1、PendingEvent.FLAG_UPDATE_CURRENT);
AlarmManager am=(AlarmManager)context.getSystemService(ALARM\u服务);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP,setcalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY,PendingEvent);
}
公共静态void取消提醒(上下文上下文、类cls、int uniqueAlertID)
{
//禁用接收器
ComponentName接收器=新的ComponentName(上下文,cls);
PackageManager pm=context.getPackageManager();
pm.setComponentEnabledSetting(接收器、,
PackageManager.COMPONENT\u已启用\u状态\u已禁用,
PackageManager.Don_KILL_APP);
意向意向1=新意向(上下文,cls);
PendingEvent PendingEvent=PendingEvent.getBroadcast(上下文,
uniqueAlertID、intent1、PendingContent.FLAG_UPDATE_CURRENT);
AlarmManager am=(AlarmManager)context.getSystemService(ALARM\u服务);
上午取消(挂起);
挂起。取消();
}
与第三点相同。只需使用不同的方法和时间即可。最简单的解决方案是以所需的频率安排一个Runnable
。在runnable中,添加一个条件来检查您是否在所需的时间间隔内,并且在这种情况下只发送消息。但是它一天只运行一次作业。我必须经常做这项工作(每小时或每30分钟一次)。正如你所说,你已经找到了第三点的解决方案。所以我没有申请它的来源。但你也可以使用它1小时。
// I am using this for scheduling and repeating, it is working fine
//**I am also searching for to Stop Scheduler after Specific Time**
public static void setReminder(Context context, Class<?> cls, int hour, int min, int uniqueAlertID)
{
Calendar calendar = Calendar.getInstance();
Calendar setcalendar = Calendar.getInstance();
setcalendar.set(Calendar.HOUR_OF_DAY, hour);
setcalendar.set(Calendar.MINUTE, min);
setcalendar.set(Calendar.SECOND, 0);
// cancel already scheduled reminders
cancelReminder(context,cls, uniqueAlertID);
if(setcalendar.before(calendar))
setcalendar.add(Calendar.DATE,1);
// Enable a receiver
ComponentName receiver = new ComponentName(context, cls);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Intent intent1 = new Intent(context, cls);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, uniqueAlertID, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, setcalendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pendingIntent);
}
public static void cancelReminder(Context context,Class<?> cls, int uniqueAlertID)
{
// Disable a receiver
ComponentName receiver = new ComponentName(context, cls);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Intent intent1 = new Intent(context, cls);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
uniqueAlertID, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
pendingIntent.cancel();
}