0

基本上,我执行和 AsyncTask 从我的服务器获取一些详细信息。如果服务器回复用户未登录,我想执行另一个 AsyncTask 尝试登录,然后再次调用我的初始 AsyncTask。

我有一个任务 X。根据 X 的结果(我将在 X 的 onPostExecute() 中得到),我必须决定是否调用任务 Y。

现在,如果 Y 的结果是肯定的,我想再次调用 X。

现在我正在为每个 AsyncTask 使用活动,以便我可以使用 startActivityForResult 和 onActivityResult 函数处理逻辑。无论如何我可以只使用 AsyncTasks 做同样的事情吗?就像从另一个调用一个 AsyncTask 一样?

4

1 回答 1

1

我认为你应该有两个不同的异步任务:

  • 1 计算 X 的值;
  • 另一个覆盖 X 的否定结果;

所描述的行为可以通过AsyncTask的流方法(onPreExecute、doInBackground、onProgressUpdate 和 onPostExecute)轻松实现。此外,您可以使用参数/返回机制在两者之间传递值。

我看到如下异步任务之一:

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
         }
    }
}

另一个就是这样,但必须在后台计算 Y 并在 Y 计算后调用MyAsyncTask的另一个实例。最后,所有进程都将通过递归方式退出。如[wtsang02]所述,请注意不要将 UI 更新放在 doInBackground 中(仅在 onProgressUpdate 或 onPostExecute 中进行更新),因为它甚至会生成CalledFromWrongThread异常!

于 2013-02-06T20:22:23.290 回答