基本上,我执行和AsyncTask从我的服务器中获取一些细节。如果服务器回复用户未登录,我想执行另一个AsyncTask尝试登录,然后再次调用我的初始AsyncTask。
我有一个任务X. 根据X的结果(我将在X的onPostExecute()中得到),我必须决定是否调用任务Y.
现在,如果Y的结果为正,我想再次调用X.
现在我正在为每个AsyncTask使用Activities,以便我可以使用startActivityForResult和onActivityResult函数来处理逻辑。无论如何我只能使用AsyncTasks做同样的事情吗?比如从另一个调用一个AsyncTask?
答案 0 :(得分:1)
我认为你应该有两个不同的异步任务:
可以通过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 异常!