所以我有一个循环,我想每5分钟轮询一次数据,以便将我的api请求降到最低。问题是当Android手机上的分钟时,CurrentMin不会更新。它开始正确,但后来无法保持最新状态。我是如何每5分钟制作一次民意调查数据的?
while (x==false) {
currentMin= c.get(Calendar.MINUTE); //get the current min
System.out.println(currentMin);
if (currentMin%5==0) {//poll the data every 5 min
***Poll data***
}
}
答案 0 :(得分:0)
来自How to run a method every X seconds:
使用Handler
。从来没有,我的意思是从不安排Android中while
的任务。您的电池将在几分钟内干燥,您将锁定您的UI并使您的应用程序变慢。
Handler h = new Handler();
int delay = 1000; //interval in milliseconds
h.postDelayed(new Runnable(){
public void run(){
//pool data
h.postDelayed(this, delay);
}
}, delay);
答案 1 :(得分:0)
您可以尝试使用private class UserAttributesMapper implements AttributesMapper {
@Override
public Object mapFromAttributes(Attributes attributes) throws NamingException {
LdapUser user = new LdapUser();
user.setCn((String)attributes.get("cn").get());
user.setMemberOf((String)attributes.get("memberOf").get());
/*String member = (String)attributes.get("memberOf").get();
int length = attributes.get("memberOf").size();
if(member != null){
for(int i = 0;i<= length; i++){
user.setMemberOf(member);
}
}*/
//user.setMemberOf(attributes.get("memberOf").getID());
user.setsAMAccountName((String)attributes.get("sAMAccountName").get());
return user;
}
}
。循环的aproach是一个非常糟糕的选择。
这是一个使用它的例子
http://examples.javacodegeeks.com/android/core/activity/android-timertask-example/
答案 2 :(得分:0)
使用ScheduledThreadPoolExecutor
,如下所示:
private ScheduledThreadPoolExecutor mScheduleTaskExecutor = new ScheduledThreadPoolExecutor(1);
mScheduleTaskExecutor.scheduleAtFixedRate(yourRequestRunnable, 0, 5, TimeUnit.SECONDS);
yourRequestRunnable将是:
Runnable yourRequestRunnable = new Runnable() {
// Do your request here
}
这基本上可以保证您以固定的速率执行代码。如果您在请求完成后需要在UI中执行某些操作,只需在runOnUiThread()
上包装处理UI更改的代码