0

基本的に、AsyncTask を実行してサーバーから詳細を取得します。サーバーがユーザーがログインしていないと応答した場合、別の AsyncTask を実行してログインを試み、最初の AsyncTask を再度呼び出します。

タスク X があります。X の結果 (X の onPostExecute() で取得する) に基づいて、タスク Y を呼び出すかどうかを決定する必要があります。

ここで、Y の結果が正の場合、X を再度呼び出します。

現在、startActivityForResult および onActivityResult 関数を使用してロジックを処理できるように、AsyncTask ごとにアクティビティを使用しています。とにかく、AsyncTasks だけを使用して同じことを行うことができますか? ある AsyncTask を別の AsyncTask から呼び出すようなものですか?

4

1 に答える 1

1

2 つの異なる非同期タスクが必要だと思います。

  • 1 つは X の値を計算します。
  • X の負の結果をカバーするための別のもの。

説明されている動作は、 AsyncTaskのフロー メソッド (onPreExecute、doInBackground、onProgressUpdate、および onPostExecute) を使用して簡単に実装できます。また、引数/戻りメカニズムを使用して、その間に値を渡すことができます。

次のような非同期タスクの 1 つが表示されます。

private class MyAsyncTask extends AsyncTask<Void, boolean, boolean> {
    @Override
    protected boolean doInBackground() {
        boolean result = [COMPUTE_X];
        return result;
    }
    @Override
    protected boolean onProgressUpdate(boolean result) {
         return result;
    }
    @Override
    protected void onPostExecute(boolean result) {
         if (!result) {
             new ComputeY_AsyncTask().execute();
         } else {
             // just go ahead
         }
    }
}

もう 1 つはこのようなものですが、バックグラウンドで Y を計算し、Y の計算後にMyAsyncTaskの別のインスタンスを呼び出す必要があります。最終的に、すべてのプロセスは再帰手段によって終了します。[wtsang02]で述べられているように、UI 更新を doInBackground 内に置かないように注意してください (更新はonProgressUpdateまたは onPostExecute でのみ行います) 。

于 2013-02-06T20:22:23.290 に答える