Обычный способ, которым мы занимаемся 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.
Спасибо заранее У