首页 > 解决方案 > 每天在固定时间后运行一个方法

问题描述

我的应用程序中有功能,用户可以选择他想从应用程序获取通知的时间。在这种情况下,我以这种格式从用户那里获取输入12:00 AM。我编写了一个在我的应用程序中创建通知的方法,该方法运行良好,但我想每天在用户选择的时间调用该方法。此外,如果应用程序被完全破坏甚至没有在后台运行,是否会在每天用户选择的时间调用此方法?

String user_time=tinyDB.getString("app_check_time"); // This is user selected time e.g, 12:00 PM
Calendar calendar = Calendar.getInstance();
Date date1 = null;
try {
    date1=new SimpleDateFormat("h:m a").parse(user_time);
} catch (ParseException e) {
    e.printStackTrace();
}
calendar.set(Calendar.HOUR_OF_DAY, date1.getHours());
calendar.set(Calendar.MINUTE, date1.getMinutes());
Date time = calendar.getTime();
System.out.println("hourr  "+time);
timer = new Timer();
timer.schedule(new createNotification(), time);

标签: androidsimpledateformat

解决方案


您是否考虑过使用 Quartz Scheduler 之类的东西?这个库有一种机制,可以使用类似 cron 的表达式来安排任务在每天设定的时间段内运行(看看 CronScheduleBuilder)。

一些示例代码(未测试):

public class GetDatabaseJob implements InterruptableJob
{
    public void execute(JobExecutionContext arg0) throws JobExecutionException
    {
        getFromDatabase();
    }
}

public class Example
{
    public static void main(String[] args)
    {
        JobDetails job = JobBuilder.newJob(GetDatabaseJob.class);

        // Schedule to run at 5 AM every day
        ScheduleBuilder scheduleBuilder = 
                CronScheduleBuilder.cronSchedule("0 0 5 * * ?");
        Trigger trigger = TriggerBuilder.newTrigger().
                withSchedule(scheduleBuilder).build();

        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.scheduleJob(job, trigger);

        scheduler.start();

} }

前面还有一些工作要做,你可能需要重写你的作业执行代码,但它应该让你更好地控制你希望你的作业如何运行。此外,如果您需要,更改时间表会更容易


推荐阅读