如何在不使用活动的情况下处理基于结果的AsyncTasks?

时间:2013-02-06 19:47:09

标签: android android-asynctask

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

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

现在,如果Y的结果为正,我想再次调用X.

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

1 个答案:

答案 0 :(得分:1)

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

  • 一个计算X的值;
  • 另一个来掩盖X的负面结果;

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

我看到其中一个异步任务如下:

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 的另一个实例。最后,所有过程都将以Recursion的方式退出。正如 [wtsang02]所述,小心不要将UI更新放在doInBackground中(仅在onProgressUpdate或onPostExecute中进行更新),因为它甚至可以生成 CalledFromWrongThread 异常!