4

別のスレッドで行う作業があります (doingAsyncTask による)。ユーザーがボタンをクリックすると作業が開始されます。しかし同時に、doingAsyncTask の 1 つのオブジェクトだけがこの作業を行う必要があります。つまり、doingAsyncTask が機能している場合は、ボタンをクリックして、doingAsyncTask の新しいオブジェクトを作成して実行してはならず、作業が完了するまで待機する必要があります。どうすれば確認できますか?

public class SearchActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //....
    }

    public void onclickButton(View view) {
        new doingAsyncTask().execute();
    }

    public class doingAsyncTask extends AsyncTask<Void, Void, Void> {
    protected Void doInBackground(Void... unused) {
        //doing something
        return(null);
    }

    protected void onProgressUpdate() {
    }
    protected void onPreExecute() {
    }
    protected void onPostExecute() {
    }
   }
}

解決済み thx all 、それは私にとってはうまくいきます

      if(task.getStatus() == AsyncTask.Status.FINISHED)
            task=new ProgressBarShow();
        if(task.getStatus() == AsyncTask.Status.PENDING){
            //task=new ProgressBarShow();
            task.execute();
        }
4

4 に答える 4

9

Check this AsyncTask.Status

AsyncTask.Status    FINISHED    Indicates that onPostExecute(Result) has finished. 
AsyncTask.Status    PENDING     Indicates that the task has not been executed yet. 
AsyncTask.Status    RUNNING     Indicates that the task is running. 

code:

if (doingAsyncTask().getStatus().equals(AsyncTask.Status.FINISHED))
     doingAsyncTask().execute();
else

EDIT:

public class SearchActivity extends Activity {
    doingAsyncTask asyncTask; 

    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);             
       // ...
       asyncTask = new doingAsyncTask();   
    }
    public void onclickButton(View view) {
         if(ayncTask.getStatus().equals(AsyncTask.Status.FINISHED) || ayncTask.getStatus().equals(AsyncTask.Status.PENDING)) {
             asyncTask.execute();
         }
         else {
             // do something
         }
    }
    // ...
}
于 2012-04-06T11:42:08.360 に答える
2

You can check the status of AsyncTask => AsyncTask.Status

For example:

    myAsyncTask mtask = new myAsyncTask();
    mtask.execute();

   // write this wherever you want to check status
   if(mtask.getStatus() == AsyncTask.Status.FINISHED){
        // My AsyncTask is done and onPostExecute was called
    }
于 2012-04-06T11:42:06.470 に答える