【问题标题】:How to synchronize the statements in AsyncTask doInBackground() method in Android如何在 Android 中同步 AsyncTask doInBackground() 方法中的语句
【发布时间】:2012-04-27 12:56:56
【问题描述】:

我已经写了如下代码

公共类 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() iam 调用 AsyncTask doInBackground 在 doInBackground iam 调用名为 compareData() 的方法。在 compareData() 方法中 iam 使用计时器。计时器在 webservice 中发送对 webservice 的请求我得到一个布尔值,如果它是真的我需要返回完成。如果它是假的我不想返回完成,我应该留在 compareData() 方法中,并且每五分钟它应该发送请求直到我得到是的。但是当计时器等待五分钟时,在此期间,计时器后的语句正在执行并且返回值完成返回到 doInBackground 并且控件将转到 onPostExecute() 但在后台计时器正在运行。当我取消计时器时如何返回完成

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    由于您在doInBackground 中运行它,因此您可以同步执行检查。因此,您可以使用Thread.sleep 方法来代替计时器。

    static final long RETRY_DURATION = 5*60*1000;
    public String compareData(){
        boolean boolValue = false;
        do{
            //code regarding webservices.
            if(!boolValue){
                try{
                    Thread.sleep(RETRY_DURATION);
                }catch(InterruptedException ex){
                    ex.printStackTrace();
                }
            }
        }while(!boolValue);
        return "finish";
    }  
    

    【讨论】:

    • 非常感谢您,我会尽力让您知道
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多