每次不同的分钟数重复任务

时间:2014-03-19 01:02:05

标签: java android service alarmmanager repeat

我需要我的应用程序每x分钟执行一次方法。但是x每次都可以不同:它可以在15到60之间变化,具体取决于其他因素。

即使用户已关闭应用程序,或者即使用户已重新启动手机,也必须执行该方法。

我正在尝试使用AlarmManager,但我不知道这是否是我案例的最佳方式。 是吗?或者AlarmManager是一种资源消耗方式?

1 个答案:

答案 0 :(得分:0)

首先创建一个IntentService并覆盖onHandleIntent:

@Override
protected void onHandleIntent(Intent intent) {
    updateLocationInBackground(); // or whatever task you need to do every x minutes
    scheduleNextUpdate();
}

该方法只是这样做:

private void scheduleNextUpdate() {
    new Scheduler().start();
}

调度程序线程如下所示:

private class Scheduler extends Thread {
    @Override
    public void run() {
            Intent i = new Intent(UserLocationUpdaterService.this, UserLocationUpdaterService.this.getClass());
            PendingIntent pendingIntent = PendingIntent.getService(UserLocationUpdaterService.this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

            long currentTime = System.currentTimeMillis();

        /* Replace this part with your computation as to when the next trigger should happen. Mine is set to fire off every 5 minutes.*/
            long nextUpdateTimeMillis = currentTime + (5 * DateUtils.MINUTE_IN_MILLIS);

            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, nextUpdateTimeMillis, pendingIntent);
        }
    }

使用startService()在您的主Activity或已注册BOOT_COMPLETED的某些BroadcastReceiver上,或两者同时触发此Intent。