Intereting Posts
Как отклонить родительское дополнение в дочернем элементе Клонирование источников Android на локальном сервере репозитория Позиционирование egnos в устройстве Android Как восстановить транзакцию в In-App Billing (Android)? Использование GeoFire для заполнения Firebase Recycler View в android Android мультитач? Не удается подключиться к wcf-сервису на локальном хосте с эмулятора Android Является ли контекст приложения всегда одинаковым независимо от класса? Исключение пытается выполнить приложение для Android из Eclipse To Android Studio Как я могу сделать звук медиа-плеера андроидов? UNREGISTERED_ON_API_CONSOLE при получении токена OAuth2 на Android Вкус продукта: найден дубликат класса Как я могу реплицировать этот шаблон пользовательского интерфейса: нажмите элемент ListView и под ним? Уведомление deleteIntent не работает Android: загрузите файл с сервера и покажите ход загрузки на панели уведомлений с помощью AsyncTask

Создание очереди загрузки

Поэтому мне нужно загрузить несколько изображений на веб-сервер. У меня есть метод загрузки. Теперь мне нужен способ сделать очередь загрузки, чтобы я мог управлять и отменять загрузки. Каков наилучший способ сделать что-то подобное? Я буду защищать эту услугу. Я просматривал класс IntentService, и мне кажется, что это хороший способ сделать очередь (так как мне просто нужно загружать 1 файл за раз), но моя загрузка будет состоять из 3 частей: первая часть, на которую я звоню на сервер Получить авторизацию, вторая будет фактической загрузкой, а третья будет отправлять подтверждение о том, что файл был успешно отправлен.

Хорошо, так вот сделка. Как отменить конкретную загрузку в очереди? Как отложить уничтожение службы, если процесс находится в третьей части загрузки (отправка успешной информации о закачке в webService)?

Как отменить конкретную загрузку в очереди?

С IntentService вы этого не делаете. Вам нужно будет написать свой собственный Service который ведет себя как IntentService (фоновый поток, рабочая очередь, stopSelf() когда очередь пуста), но где вы можете лучше управлять очередью.

Как отложить уничтожение службы, если процесс находится в третьей части загрузки

Если вы используете IntentService или свой собственный IntentService workalike, служба обычно не будет уничтожена, пока не будет больше работы.

Если вы беспокоитесь о том, что Android отключает ваш сервис, потому что он считает, что вы слишком долго в памяти, используйте startForeground() .

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

 ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

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

 yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

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

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

 threadPoolExecutor.shutdown()