0

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

响应是一个 JSON 对象,其中包含数据和直到下一次更新的间隔:

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

我希望应用程序在nextUpdateIntervalSeconds. 在此示例中,应在一小时后获取下一次更新。如果网络调用不成功,nextUpdateIntervalSeconds则应使用默认值。

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

4

3 回答 3

3

尝试这个;

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

编辑

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

public long nextUpdateIntervalSeconds = 3000;
于 2014-09-23T09:15:43.453 回答
1

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

你可以从这里参考: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);
于 2014-09-23T09:30:15.377 回答
0

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

于 2014-09-23T09:16:08.093 回答