1

私は以下のようなコードを書きました

パブリッククラス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からのコードでは、doInBackgroundiamでAsyncTaskdoInBackgroundを呼び出し、compareData()という名前のメソッドを呼び出しています。compareData()メソッドでは、タイマーを使用してiam。タイマーは、Webサービスのリクエストを送信します。 boolean value、trueの場合はfinishを返す必要があります。falseの場合はfinishを返したくないので、compareData()メソッドにとどまり、trueになるまで5分ごとにリクエストを送信する必要があります。タイマーが5分間待機しているとき、この間、タイマーが実行され、戻り値の終了後のステートメントがdoInBackgroundに戻り、コントロールはonPostExecute()に移動しますが、バックグラウンドでタイマーが実行されます。タイマーをキャンセルしたときに終了を返すにはどうすればよいですか

4

1 に答える 1

2

で実行しているので、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";
}  
于 2012-04-27T13:21:51.280 に答える