我有 2 个 ASyncTask,一个从 httpPost 检索值,另一个更新 UI 的一些元素(包括列表视图)。问题在于,由于两个 ASyncTask 共享相同的后台线程,如果网络操作首先启动并且运行缓慢(由于网络连接不良)。其他后台线程花费太多时间使应用程序不负责任。
由于两个 ASyncTask 都是独立的,因此让另一个等待是非常愚蠢的。不同的类使用不同的线程会更符合逻辑,我错了吗?
阅读ASyncTask文档。谈论使用 executeOnExecutor(),但我如何在 API 级别低于 11 的情况下解决这个问题?
这是一个重现“问题”的小例子
new Task1().execute();
new Task2().execute();
和
public class Task1 extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
GLog.e("doInBackground start 1");
SystemClock.sleep(9000);
GLog.e("doInBackground end 1");
return null;
}
@Override
protected void onPreExecute() {
GLog.e("onPreExecute 1");
super.onPreExecute();
}
@Override
protected void onPostExecute(Void result) {
GLog.e("onPostExecute 1");
super.onPostExecute(result);
}
}
public class Task2 extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
GLog.e("onPreExecute 2");
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
GLog.e("doInBackground start 2");
SystemClock.sleep(9000);
GLog.e("doInBackground end 2");
return null;
}
@Override
protected void onPostExecute(Void result) {
GLog.e("onPostExecute 2");
super.onPostExecute(result);
}
}