Android:运行具有不同睡眠间隔的周期性任务

时间:2014-09-23 09:02:55

标签: android service alarmmanager periodic-task

我正在构建一个Android应用,它应该在后台通过网络从服务器获取定期更新。

响应是一个JSON对象,它包含数据和下一次更新之前的间隔:

{
   "data": ["blah1", "blah2", ...],
   "nextUpdateIntervalSeconds": 3600
}

我希望该应用在nextUpdateIntervalSeconds之后获取下一次更新。在此示例中,应在一小时后获取下一个更新。如果网络呼叫不成功,则应使用默认的nextUpdateIntervalSeconds

如何在Android中运行具有不同睡眠时间的定期任务?

3 个答案:

答案 0 :(得分:3)

试试这个;

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        getDataFromServer();
    }
}, nextUpdateIntervalSeconds); // in ms

修改

您的变量nextUpdateIntervalSeconds必须在第一个间隔中具有值。您应该使用默认值初始化它,如;

public long nextUpdateIntervalSeconds = 3000;

答案 1 :(得分:1)

我想使用Android的AlarmManager每次设置一次警报并为我的BroadcastReceiver注册PendingIntent。收到广播到我的BroadcastReceiver的警报后,我会启动一个服务来执行更新,在更新之后,我会用更新的间隔设置另一次警报。

您可以从此处获取参考:http://code.tutsplus.com/tutorials/android-fundamentals-scheduling-recurring-tasks--mobile-5788

但是他们设置了一个定期警报,您需要更改为一次警报并在更新数据后再次调用它。 更改以下

alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP,
            updateTime.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, recurringDownload);

以下

alarmManager.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),pendingIntent);

答案 2 :(得分:0)

我会在sharedPreferences中设置间隔值,并在每次从Web服务获取新值时覆盖该值,并且从sharedPreferences使用set intervel ever time