AsyncTask.executeOnExecutor () до уровня API 11

Обычно 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

33
задан yorkw 6 November 2012 в 04:09
поделиться