的解决方案是从调用的AsyncTask一个TimerTask
protected class MyTimerTask extends TimerTask {
@Override
public void run() {
(new AsyncTask<Void, Void, String>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
...
}
@Override
protected String doInBackground(Void... params) {
//invoke REST service
....
return "";
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
//post execute operations
...
}
}).execute();
}
}
,如果你害怕调用服务器的时间太长,然后要求他们重叠,可以输入一个的AtomicBoolean信号量(同步)以下列方式:
旗语声明
private final AtomicBoolean isRunning = new AtomicBoolean(false);
的TimerTask用旗语
protected class MyTimerTask extends TimerTask {
@Override
public void run() {
//if isRunning is true does not execute the task
if (isRunning.get()) return;
(new AsyncTask<Void, Void, String>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
//active flag isRunning
isRunning.set(true);
...
}
@Override
protected String doInBackground(Void... params) {
....
//invoke REST service
....
return "";
}
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
//post execute operations
...
//deactive flag isRunning
isRunning.set(false);
}
}).execute();
}
}
注:小心,当你发现一个错误,因为如果由于某种原因仍处于活动状态将不再运行的AsyncTask