Асинхронная задача .. не может вызвать executeOnExecutor ()

У меня есть проблема с некоторыми задачами Async, которые выполняются в моем приложении для Android. Из-за того, что я использую некоторый сетевой IO, он может когда-нибудь занять больше времени, чем ожидалось, и заблокировать другие запущенные задачи async.

Мне нужно сохранить свои целевые и минимальные версии sdk, но они нацелены на targetSdkVersion = "15" с помощью minSdkVersion = "8". Я требую, чтобы при вызове задачи Async я могу проверить SDK устройств, и если он больше 11, он может вызывать executeOnExecutor (), а не просто выполнять, чтобы позволить устройству запускать их параллельно и предотвращать эту операцию блокировки.

Хотя у меня есть целевой SDK 15, устройство, которое я использую, имеет SDK 17.

Однако при вызове:

MyAsyncTask(this).executeOnExecutor(); 

Я получаю сообщение об ошибке «Метод executeOnExecutor () не определен для типа« и единственный доступный мне вариант:

 MyAsyncTask(this).execute(); 

MyAsyncTask – объект класса, который расширяет AsyncTask и перегружает стандартные методы onPreExecute, doInBackground, onProgressUpdate & onPostExecute.

Я пробовал следовать некоторым рекомендациям, перечисленным здесь … http://steveliles.github.io/android_s_asynctask.html

Установите цель сборки для уровня API 11 или выше. Обратите внимание, что «build target»! = «Target SDK» ( android:targetSdkVersion ). «Цель сборки» задана в Project> Properties> Android on Eclipse или project.properties для построения командной строки.

Для условного использования executeOnExecutor() другой подход заключается в использовании отдельного вспомогательного метода:

  @TargetApi(11) static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task, T... params) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); } else { task.execute(params); } } 

Затем вы использовали бы этот метод для выполнения своих задач:

  executeAsyncTask(new MyTask(), param1, param2); 

(Для многих параметров, которые вы хотели передать для execute() )