2012-02-03 17 views
0

私はAsyncTaskを持っており、バックグラウンドでの進捗状況は無限ループです。しかし、ユーザーが私のアプリを停止したり、私のアプリから戻ったりするときにAsyncTaskを停止する必要があります(私のアプリはフォアグラウンドに行きます)。どうしたらいいですか?無限ループでAsyncTaskを停止する方法は?

ソリューション:

プライベートブールが= falseを行って、

private class CurTask extends AsyncTask<String, Void, Object> { 
     protected Void doInBackground(String... args) { 
      while(!done){ 
       DefaultCurProgress();   
       publishProgress(); 
      } 
     } 

     protected void onProgressUpdate(Void...unused) { 
      textCur = (TextView)findViewById(R.id.text_cur); 

      SharedPreferences myPrefs = MyActivity.this.getSharedPreferences("myPrefs", MODE_PRIVATE); 
      String prefNameDefaultCur = myPrefs.getString(DefaultCur, ""); 

      textCur.setText(prefNameDefaultCur); 
     } 
} 

@Override 
    public void onPause(){ 
     super.onPause(); 
     done=true; 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     done=false; 
    } 
+0

スレッドと同様に、フラグ '' while(keepRunning == true) ''を使用することができます。 – harism

答えて

4

最後にそれを伝えるあなたのAsyncTask内でメソッドを宣言します。そのような何か:

private class CurTask extends AsyncTask<String, Void, Object> { 
    private boolean done = false; 

    public void quit() { 
     done = true; 
    } 

    protected Void doInBackground(String... args) { 
     while(!done){ 
      DefaultCurProgress();   
      publishProgress(); 
     } 
    } 
+0

しかし、私のアクティビティやアプリケーションが停止しているときに、どのようにしてquit()を呼び出すことができますか? – Adam

+0

あなたのアクティビティの 'onPause()'メソッドから呼び出しますか? –

+0

はい、私はそれを考えましたが、あなたのコードをリメイクしたくありませんでした。今、それは動作します、ありがとう。コードがアップします。 – Adam

0

はブールメンバ変数を追加し、するのではなく、あなたの中の状態でそれを使用します。

これをキャンセルする必要がある場合は、この変数をfalseに設定するインスタンスメソッドを呼び出すだけで、doInBackgroundメソッドが戻り、タスクが終了します。

関連する問題