Java 在特定时间后停止计划程序

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); 在

我正在尝试在AKKA创建一个调度程序。 要求如下:

  • 每天早上5点开始
  • 每天晚上10点停止
  • 它将每1小时(频率)执行一次作业
  • 我找到了第三点(频率)的解决方案,但无法找到第一点和第二点的解决方案

     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();
        }