Intereting Posts
Adb remount разрешено, но доступно для доступа к суперпользователю в shell-android Как добавить текст в видеозапись? Как использовать twitter api в приложении для Android для отправки только твита Исходный ресурс Android не найден? Зависимость игнорируется из-за конфликта Android-студия Android Studio 3.0: canary 6: android.content.res.Resources $ NotFoundException внутри Запуск активности Воспроизведение локального звука в телефонной зазоре Как бороться с отсутствующей исходной папкой src / test / java в проекте Android / Maven? Недопустимая ошибка версии 1.7 при компиляции с помощью gradle Выполнение не выполнено для задачи ': app: transformClassesAndResourcesWithProguardForRelease Как запустить эмулятор Android из командной строки? Установить видимость индикатора выполнения после завершения загрузки изображения с использованием библиотеки Glide Не удалось инициализировать приемник событий отображения Сохранять список или задавать в SharedPreferences Не удается импортировать org.apache.http.HttpResponse в Android Studio

Правило 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 .