Очередь загрузки в Android

Каков наилучший способ реализации очереди загрузки в Android?

Я подозреваю, что могут быть некоторые классы платформ, которые могут выполнять большую часть работы.

Solutions Collecting From Web of "Очередь загрузки в Android"

Каков наилучший способ реализации очереди загрузки в Android?

Используйте IntentService . Он поставляет вам очередь и фоновый поток, поэтому все, что вам нужно сделать, это поместить вашу логику загрузки в onHandleIntent() . См. Здесь пример проекта, демонстрирующий это.

Я бы предложил посмотреть на пакет java.util.concurrent и, более конкретно, ознакомиться с Executors

Вы можете создать ExecutorService, который будет запускать только число «n» Runnable и автоматически останавливать остальные задачи. Как только один из выполняемых потоков завершает выполнение, он подбирает следующий объект Runnable в очереди для выполнения.

Использование IntentService затруднит поддержку отмены. Это то, о чем вам нужно знать. Если вы можете, это API-уровень 9, вам будет лучше использовать http://developer.android.com/reference/android/app/DownloadManager.html

От API 11 вверх, хороший подход – использовать FixedThreadPool с задачами async. Сделайте один раз:

 ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

Где 3 – количество загрузок, которые вы хотите запустить одновременно. Он будет стоять в очереди, если уже запущено 3 загрузки, и автоматически обработает задачу позже. Запустите задачи async с помощью:

 yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

Params – это, вероятно, URL, к которому вы хотите подключиться. Вы можете прочитать его в onPostExecute своей асинтезы и подключиться к серверу с помощью HttpURLConnection .

Убедитесь, что вы вызываете это при завершении работы:

 threadPoolExecutor.shutdown()