2014-09-23 73 views
0

我正在构建一个Android应用程序,它应该在后台从服务器通过网络获取定期更新。Android:以不同的睡眠时间间隔运行周期性任务

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

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

我想应用nextUpdateIntervalSeconds后读取下一更新。在这个例子中,下一次更新应该在一个小时后提取。如果网络呼叫不成功,则应使用默认的nextUpdateIntervalSeconds

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

+0

尝试使用报警经理 – 2014-09-23 09:23:27

+0

...但不重复报警......每次执行从设置一个报警服务器代码更新时间.. 。记住,设置闹钟将无法生存引导... – Selvin 2014-09-23 09:26:45

回答

3

试试这个;

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

编辑

你的可变nextUpdateIntervalSeconds必须具有在第一间隔的值。你应该使用你的默认值来初始化它;

public long nextUpdateIntervalSeconds = 3000; 
+0

后延迟1小时间隔...坏主意...... – Selvin 2014-09-23 09:19:19

0

我会设置在sharedPreferences的区间值,每一次我从网上servieces得到新的值,并使用设置有限区间不断从sharedPreferences

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); 
相关问题