我想监听 SQL Server 数据库,以了解 Android 中的数据是否有更改,因此我想每隔 5 秒向 Web 服务发送请求,以了解新数据值。我该如何做?你能给个例子吗?
您可以使用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
}
更多信息:如何在固定时间间隔后重复执行异步任务
PerformBackgroundTask
这个类是继承了 AsynchTask
的类。 - My God使用Service类,在该类中实现线程调度程序,每5秒发送一次请求。以下是代码片段:
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();
}
}
使用此代码:
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// Hit WebService
}
}, 0, 5, TimeUnit.SECONDS);
轮询通常不是一个好主意,因为它会在服务器上创建不必要的负载。在您的情况下,每个用户每分钟20个请求。
所以采用推送机制。这个想法是这样的,每当你收到一个推送消息,你就会调用Web服务来获取最新的数据。
这个链接会帮助你:推送而不是轮询 - 如何使用GCM更新应用程序