Intereting Posts
Как создать собственный менеджер загрузок в android 2.2 Android: как использовать dip (независимый от плотности пиксель) в коде? Как я могу объединить два растровых изображения один над другим в выбранной точке на первом изображении в android? Витрина Посмотреть текст gravity Получение ошибки: не удалось найти класс «android.app.AppOpsManager», на который ссылается метод com.google.android.gms.common.GooglePlayServicesUtil.zza Требуется аннотирование HTTP-аннотации модификации 2 (например, @GET, @POST и т. Д.). Служба Android: onBind (Intent) и onUnbind (Intent) вызывается один раз При отладке устройства с поддержкой АРТ приложение для Android работает медленно Как настроить потоковое видео в прямом эфире на мобильный сервер wowza? Высота изображения в виде обертывания отображаемого изображения Как захватить новый Intent в onNewIntent ()? Как добавить анимацию в конец действия () Не удалось запустить «adb root» на корневом телефоне Android Main не может быть разрешен или не является полем @ Преобразован в% 40 в запросе HTTPPost

Правило Threading AsyncTask. Может ли оно действительно использоваться только один раз?

В документации по AsyncTask он дает, как правило, следующее:

  • Задача может быть выполнена только один раз (исключение будет выбрано при попытке выполнить второе выполнение).

Все это означает, что вам нужно создавать новый экземпляр класса каждый раз, когда вы хотите его использовать, не так ли? Другими словами, это должно быть сделано следующим образом:

new DownloadFilesTask().execute(url1, url2, url3); new DownloadFilesTask().execute(url4, url5, url6); 

Или, наоборот, вы НЕ можете сделать следующее:

 DownloadFilesTask dfTask = new DownloadFilesTask(); dfTask.execute(url1, url2, url3); dfTask.execute(url4, url5, url6); 

Может ли кто-то проверить, что это точная интерпретация?

Я понимаю, что я в значительной степени просто ответил на это сам, когда я печатал это … Но это было не сразу очевидно для меня, поэтому я думаю, что было бы полезно, если бы выложили его.

Solutions Collecting From Web of "Правило Threading AsyncTask. Может ли оно действительно использоваться только один раз?"

Может ли кто-то проверить, что это точная интерпретация?

Это очень точная интерпретация.

Существует еще одна версия с AsyncTasks. Обратите внимание, что в примере

 new DownloadFilesTask().execute(url1, url2, url3); new DownloadFilesTask().execute(url4, url5, url6); 

Выполненный на Android 3+ (уровень API 11, HONEYCOMB) url1 и url4 не будут загружаться параллельно. В частности, если контакт с url1 , передача по url4 даже не начнется, пока не url4 время. Если вы явно не укажете иное, все AsyncTasks обслуживаются одним и тем же рабочим потоком.

Документы говорят:

Порядок исполнения

При первом вводе AsyncTasks выполнялись последовательно на одном фоновом потоке. Начиная с DONUT, это было изменено на пул потоков, позволяющий нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать общих ошибок приложений, вызванных параллельным выполнением.

Если вы действительно хотите выполнить параллельное выполнение, вы можете вызвать executeOnExecutor (java.util.concurrent.Executor, Object []) с помощью THREAD_POOL_EXECUTOR .