У меня есть 2 ASyncTasks, один извлекает значение из httpPost, а другое обновляет некоторые элементы пользовательского интерфейса (включая список). Проблема заключается в том, что, поскольку оба ASyncTasks используют один и тот же фоновый поток, если сетевое взаимодействие запускается первым и работает медленно (из-за плохой сетевой связи). Другие фоновые потоки занимают слишком много времени, делая приложение безответственным.
Поскольку обе ASyncTasks являются независимыми, это довольно глупо, чтобы подождать другого. Было бы логичнее, если бы асинтемы разных классов использовали разные потоки, я не прав?
Чтение документа 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);
}
}