如何每小时执行一项任务?

时间:2012-05-17 05:37:01

标签: java android

我一直在开发Android应用程序,我需要每小时执行1个任务。我使用以下代码:

private static final long ALARM_PERIOD = 1000L;

public static void initAlarmManager(Context context) {

    Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();
    editor.putBoolean(context.getString(R.string.terminate_key), true).commit();

    AlarmManager manager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmEventReceiver.class);
    PendingIntent receiver = PendingIntent.getBroadcast(context, 0, i, 0);
    manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime(), ALARM_PERIOD, receiver);
}

它适用于我,但我的客户告诉我,该任务仅工作一次,不会工作1小时。我哪里弄错了?请告诉我。谢谢。

4 个答案:

答案 0 :(得分:3)

根据您的代码,ALARM_PERIOD为1000L,作为重复间隔。所以我怀疑警报会在每1000毫秒内完成。

如果您为每小时设置重复间隔,则应为3600000L。 请注意,如果手机重新启动,除非您重新开始,否则您的闹钟管理器将不再有效。

这是我的代码:

private void setAlarmManager() {
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 2, intent, 0);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    long l = new Date().getTime();
    if (l < new Date().getTime()) {
        l += 86400000; // start at next 24 hour
    }
    am.setRepeating(AlarmManager.RTC_WAKEUP, l, 86400000, sender); // 86400000
}

答案 1 :(得分:2)

您是否在manifest.xml中的应用程序标签中添加了接收器标签 <receiver android:name=".AlarmReceiver" android:process=":remote"/>

答案 2 :(得分:1)

我建议你使用Android-TimerTask

而不是Alram-Manager

TimerTask类表示在指定时间运行的任务。任务可以运行一次或重复运行。它完美适合您的要求。

答案 3 :(得分:0)

尝试通过更改此类setRepeating()方法修改代码

manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime(), SystemClock.elapsedRealtime()+(60*60*1000), receiver);

OR

测试它每分钟都在重复

manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,Calendar.getInstance().getTimeInMillis(), Calendar.getInstance().getTimeInMillis()+(1*60*1000), receiver);