我开发了一个简单的Android应用程序,并且能够通过http请求从数据库发布和获取信息,并使用AsyncTask执行此操作。我的问题是,如果我想每隔5分钟从数据库中查询一下信息,或者检查是否有任何新数据已经发布到数据库中我怎么能在android中完成?
答案 0 :(得分:0)
使用 CountDownTimer 检查this
300000ms = 5分钟
CountDownTimer chkDb= new CountDownTimer(300000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
//code for db check
chkDb.start();//start again after 5 min
}
}.start();
或强>
private TimerTask mTimerTask;
private Timer t = new Timer();
public void doTimerTask() {
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
callYourMethodHere();
Log.i("TIMER", "TimerTask run");
}
});
}
};
// public void schedule (TimerTask task, long delay, long period)
t.schedule(mTimerTask, 500, 1000); //
}
public void stopTask() {
if (mTimerTask != null) {
Log.i("TIMER", "timer canceled");
mTimerTask.cancel();
}
}
task -- This is the task to be scheduled.
delay -- This is the delay in milliseconds before task is to be executed.
period -- This is the time in milliseconds between successive task executions.
答案 1 :(得分:0)
我不认为每隔5分钟轮询数据库是一个很好的解决方案。这是浪费资源。
请考虑使用某种机制,在DB中的某些内容发生更改时通知您,以便您的UI可以正常刷新。
例如,在某些项目中,我使用Otto在数据库中插入新项目时发送事件。我的片段订阅默认总线,以便他们知道什么时候发生了变化。
优点:表现。该应用仅在必须
时才有效缺点:嗯,真的不多。简单的解决方案就是说:“好的,有些东西已经改变了。让我们抛出UI中显示的所有当前信息并向DB发出新的查询!”。但漂亮的解决方案是说:“好的,有些东西有变化。有什么变化,如何将新信息添加到UI?”
但这取决于应用上下文;)