我想听sql server数据库知道android中是否有数据更改所以我想每5秒向web服务发送一次请求以了解新的数据值。我该怎么做?你能举个例子吗?
答案 0 :(得分:17)
你可以使用AsyncTask,
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
更多:How to execute Async task repeatedly after fixed time intervals
答案 1 :(得分:1)
使用Service类并在服务类中实现将每5秒发送一次请求的线程调度程序。下面是ecode片段:
public class ProcessingService extends Service {
private Timer timer = new Timer();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
sendRequest();
}
}, 0, 5000;//5 Seconds
}
@Override
public void onDestroy() {
super.onDestroy();
shutdownService();
}
}
答案 2 :(得分:0)
使用此代码:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Hit WebService
}
}, 0, 5, TimeUnit.SECONDS);
答案 3 :(得分:0)
轮询通常不是一个好主意。因为它会在服务器中造成不必要的负在您的情况下,每个用户每分钟20个请求。
所以选择Push Mechanism。所以这个想法就是这样,每当你收到推送消息时,你都会调用web服务来获取最新的数据。