我写了如下代码
公共类 SplashScreen 扩展 BaseActivity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
new DownloadPlistTask().execute("background","Progress","yes");
}
private class DownloadPlistTask extends AsyncTask<String,String,String>{
protected String doInBackground(String... dummy){
return compareLocRemPlist();
}
protected void onProgressUpdate(String... progress){
//some code here.
}
protected void onPostExecute(String result){
//handle return type from doInBackground.
}
public String compareData(){
final Timer timer = new Timer();
timer.schedule( new TimerTask(){
public void run(){
//code regarding webservices.
if(boolValue){
//if the boolValue from the webservice is true,cancel the timer.
timer.cancel();
}
},5*60*1000,5*60*1000);
return "finish";
}
}
}
在上面来自 onCreate() 的代码中,我在 doInBackground 中调用了 AsyncTask doInBackground,在 doInBackground 中,我调用了一个名为 compareData() 的方法。在 compareData() 方法中,我使用了一个计时器。计时器发送了对 web 服务的请求,在 web 服务中,我得到了一个布尔值,如果为真,我需要返回完成。如果为假,我不想返回完成,我应该留在 compareData() 方法中,每五分钟它应该发送请求,直到我得到真。但是当计时器等待五分钟时,在此期间,计时器后的语句正在执行并且返回值完成返回到 doInBackground 并且控件将转到 onPostExecute() 但在后台计时器正在运行。当我取消计时器时如何返回完成