Android は別のタスクが終了した直後に AsyncTask を呼び出します。質問する

Android は別のタスクが終了した直後に AsyncTask を呼び出します。質問する

Android AsyncTask で問題があります。TextView、ボタン、画像を含むアクティビティがあります。ユーザーがこのアクティビティに入ると、ユーザーがアクティビティから移動できるかどうかを確認するために asynctask を開始します (タスクが終了し、ボタンがアクティブにならないまで)。次に、画像を取得するために別の asyntask を開始します。そこで、内部クラスを作成しました。

AsyncTask<String, Void, JSONObject>() authTask = new AsyncTask<String, Void, JSONObject>() {
     @Override
     protected JSONObject doInBackground(String... params) {
         //call the rest api
     }
     @Override
     protected void onPostExecute(JSONObject result) {
         // check the result
         // and make another asynctask
         AsyncTask<String, Void, Bitmap> imageTask = new Async.... {
             // get image
         }
         imageTask.execute();
     }
}

authTask.execute();UI スレッドから呼び出します。

これについては嫌な予感がします。特に、うまくいかないようです (数回は問題ありませんが、突然「フリーズ」します。例外なく、ハングしたまま進行状況バーが回転します。何も起こらず、ボタンはアクティブになりません)。情報を取得し、完了したらすぐに別のタスクを開始する別の方法はありますか?

更新: API レベル 10 で作業しています。authTask では、imageTask (何らかの ID) を開始するために必要な情報を取得するため、これらのタスクを連続して呼び出す必要があります。API レベル 10 では可能ですか?

前もって感謝します!

ピーター

ベストアンサー1

getStatus()が保留中、実行中、または完了しているかどうかをチェックし、完了AsyncTaskしたら新しいタスクを開始できます。次のようにします。

if(authTask .getStatus() == AsyncTask.Status.PENDING){
    // My AsyncTask has not started yet
}

if(authTask .getStatus() == AsyncTask.Status.RUNNING){
    // My AsyncTask is currently doing work in doInBackground()
}

if(authTask .getStatus() == AsyncTask.Status.FINISHED){
    // START NEW TASK HERE
}

アプリの例:

btn.setOnClickListener(new View.OnClickListener()
  {
    public void onClick(View v)
      {
        if (authTask != null && authTask.getStatus() == AsyncTask.Status.FINISHED) {
           //START YOUR NEW TASK HERE
        }
        else
        {
          //IGNORE BUTTON CLICK
        }
      }
   }); 

おすすめ記事