Обычно AsyncTask в Android выполняется с Android API:
private class DoIntenseTask extends AsyncTask<Object, Object, Void> {
protected Void doInBackground(Object... params) {
for (Object param : params) {
Object rtnObj = doIntenseJob(param);
publishProgress(rtnObj);
}
return null;
}
protected void onProgressUpdate(Object... progress) {
for (Object rtnObj : progress) {
updateActivityUI(rtnObj);
}
}
}
Мои интенсивные задачи слабо связаны, и порядок выполнения не имеет значения. Поступая таким образом, выделяется один поток для выполнения списка интенсивных задач. лично я считаю, что это своего рода промежуточное решение. Да, интенсивная работа больше не выполняется в потоке пользовательского интерфейса, но по-прежнему необходимо выполнять одно за другим (во многих случаях мы сталкиваемся со списком интенсивных задач, я думаю, именно поэтому методы в AsyncTask многопараметрически). Google должен сделать API более многоразовым для решения различных сценариев.
Что мне действительно нравится, так это запуск нескольких doIntenseJob () параллельно, управляемых пулом потоков (например, poolSize = 5). Похоже, Google действительно предлагает решение с помощью AsyncTask.executeOnExecutor (), но, к сожалению, доступно только с уровня API 11. Я разрабатываю приложение для мобильных устройств и задаюсь вопросом, есть ли обходной путь, с помощью которого я могу добиться того же поведения на уровне API 11.
Заранее благодарим
Y