easyclick java每天定时任务

使用startJob是可以执行定时脚本,但是我不想重新执行脚本,我只想在原有脚本运行的基础上每天定时执行写作业代码,那么就有了此文章:

正常默认是有Calendar权限的,如果没有,请查看mainfest声明:

android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR

首先 diy.java,填入以下源码。

public String everyDayTask(int Hours,int Minutes,int Seconds,final Runnable runnable){
        long PERIOD_DAY = 24 * 60 * 60 * 1000; //间隔一天
        //得到日历实例,主要是为了下面的获取时间
        Calendar mCalendar = Calendar.getInstance();
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        //获取当前毫秒值
        long systemTime = System.currentTimeMillis();
        //是设置日历的时间,主要是让日历的年月日和当前同步
        mCalendar.setTimeInMillis(System.currentTimeMillis());
        // 这里时区需要的话就设置,如果仅在中国使用则定义
        //mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        //设置在几点提醒
        mCalendar.set(Calendar.HOUR_OF_DAY, Hours);
        //设置在几分提醒
        mCalendar.set(Calendar.MINUTE, Minutes);
        //下面秒数和毫秒
        mCalendar.set(Calendar.SECOND, Seconds);
        mCalendar.set(Calendar.MILLISECOND, 0);
        //获取上面设置的定时的毫秒值
        long selectTime = mCalendar.getTimeInMillis(); //startTime 毫秒
        // 方法一:如果当前时间大于设置的时间,那么就从第二天的设定时间开始
        if(systemTime > selectTime) {
            mCalendar.add(Calendar.DAY_OF_MONTH, 1);
        }            //System.out.println(date);
        // 方法二:如果当前时间大于设置的时间,那么就从第二天的设定时间开始
        /*
        if (mCalendar.getTime().before(new Date())) {
            mCalendar.add(Calendar.DAY_OF_MONTH, 1);
        }
         */
        task = new TimerTask() {
            @Override
            public void run() {
                // 逻辑处理,这里用的回调,线程的
                runnable.run();
            }
        };

        Timer timer = new Timer();
        //YouDiy task = new StateZeroController();
        //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
        timer.schedule(task,mCalendar.getTimeInMillis()-systemTime,PERIOD_DAY); //方法一
        //timer.schedule(task,mCalendar.getTime(),PERIOD_DAY); //方法二
        return mCalendar.getTime().toLocaleString();
    }

    public void cancelEveryDayTask(){
        if (task != null) {
            task.cancel();
            task = null;
        }
    }

然后在main.js调用的示例,假设我要固定每天晚上21:30写作业。

var diy=new com.plugin.tePlugin.diy();
//参数分别为:时,分,秒,执行fun
var taskT=diy.everyDayTask(21,30,0,function(){
        callMe();
        logd("定时写作业进行中,别打扰我");
    });
    logd("定时执行时间:"+taskT);

记得在程序终止时销毁,养成好习惯。

setExceptionCallback(function (msg){
    logd(" 异常停止消息: "+msg);
    diy.cancelEveryDayTask();
});
setStopCallback(function () {
    logd("我是停止回调");
    diy.cancelEveryDayTask();
    thread.stopAll();
});

好了,简单记录一下。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注