日历,每24小时执行一次代码

时间:2014-02-18 18:14:15

标签: android calendar scheduler

我想每24小时执行一段代码但是我不知道该怎么做。 我有一些代码设置了我希望循环开始但不确定如何执行结束时间的时间

    int startDay = 00; // 12am
    int end = 24; // 12 pm
    int hours = (end - startDay) % 24; //difference will be 24 hours

    Calendar calInstanceOne = Calendar.getInstance();

    // set calendar to 12 am
    calInstanceOne.set(Calendar.HOUR_OF_DAY, startDay);
    calInstanceOne.set(Calendar.MINUTE, 0);
    calInstanceOne.set(Calendar.SECOND, 0);
    calInstanceOne.set(Calendar.MILLISECOND, 0);

我是否创建另一个日历实例,设置为12pm?并比较两个?非常感谢对此的任何见解。

4 个答案:

答案 0 :(得分:3)

  

我想每24小时执行一段代码

Use AlarmManager,与either WakefulBroadcastReceivermy WakefulIntentService一起使用。理想情况下AlarmManager INTERVAL_DAY {{1}} {{1}}允许Android滑动实际时间以最大限度地为用户节省电量。

答案 1 :(得分:2)

您可以使用AlarmManager定期执行操作:

Intent intent = new Intent(this, MyStartServiceReceiver.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5000, <24h in msecs>, pendingIntent);

然后你应该在清单中注册你的BroadcastReceiver并从这个接收器调用你想要执行的方法。

答案 2 :(得分:0)

  

首先存储当前时间,然后应用程序打开时将当前时间与之前的存储时间进行比较(如果大于或等于24小时)   执行你的代码。

答案 3 :(得分:0)

你可能有几个选择,让我勾勒出最简单的选择。策略是简单地使用系统时间在24小时后执行:

package com.test;
import java.util.Calendar;

public class ExecuteCheck {
//Class fields
/* Number of milliseconds in a day
 * 
 */
private static final long C_DAY=24*60*60*1000;
//Object fields
/* Time last executed (or beginning of cycle), in milliseconds;
 * 
 */
private long lastExecuted = System.currentTimeMillis();

public ExecuteCheck() {
}

/** Set the current execution cycle time to now
 * 
 */
public void setExecutionTimeToNow() {
    lastExecuted = System.currentTimeMillis();
}
/** Set the execution cycle time to be the value in the calendar argument.
 * @param cal
 */
public void setExecutionTime(Calendar cal) {
    lastExecuted = cal.getTimeInMillis();   
}

/** Is it more than twenty-four hours since the last execution time?
 * @return
 */
public boolean isTimeToExecute() {
    return (System.currentTimeMillis() - lastExecuted) > C_DAY;
}

}