2014-02-18 55 views
1

我想每24小时执行一段代码,但是我不确定如何执行此操作。 我有一些代码,设置,我想循环开始,但不知道如何执行结束时间日历,每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); 

难道我创建另一个日历例如,设置为12点的时候?并比较两者?真的很感谢任何见解。

回答

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,并打电话给你想从这个接收器执行的方法。

+0

谢谢,这也是一个答案,帮助我。非常感谢 – user2219097

0

首先存储您的当前时间,然后每当应用程序将打开比较当前时间与以前的存储时间,如果它大于或等于24小时 执行您的代码。

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

}

相关问题