【发布时间】:2017-11-28 09:43:22
【问题描述】:
在我的 Android 应用程序中,我有多达 4 个相互依赖的异步任务,这意味着必须先完成一项任务,然后下一项任务才能与检索到的数据一起执行。现在,当代码看起来像这样时,这在某些时候可能会很不清楚:
final AsyncTask<Void, Void, Boolean> taskOne = new AsyncTask<Void, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
// retrieve required data
return true;
}
@Override
protected void onPostExecute(Boolean success) {
if (success) {
// start second task here
final AsyncTask<Void, Void, Boolean> taskTwo = new AsyncTask<Void, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
// retrieve required data
return true;
}
protected void onPostExecute(Boolean success) {
if (success) {
// start third task here
final AsyncTask<Void, Void, Boolean> taskThree = new AsyncTask<Void, Void, Boolean>() {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Boolean doInBackground(Void... params) {
// retrieve required data
return true;
}
protected void onPostExecute(Boolean success) {
if (success) {
// and so on ...
}
}
}
taskThree.execute();
}
}
}
taskTwo.execute();
}
}
}
taskOne.execute();
使用更具可读性的代码实现此行为的最佳做法是什么?
提前致谢
【问题讨论】:
-
创建三个单独的类,在 onPostExecute() 中你只需要调用另一个类,比如 new TaskTwo().execute()
-
或者你可以只使用一个类,但是,根据你之前的响应,在构造函数中传递不同的参数。
-
会建议你看看使用
RxJava来做这样的事情。
标签: android android-asynctask nested readability