2011-02-05 3 views
5

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

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

ответ

3

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

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

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

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

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

+0

Ok. Чисто. есть ли какой-нибудь пример, который может помочь мне в том, как я могу создать сервис, который вы описываете? – DArkO

+0

@DArkO: У меня нет ничего подобного. – CommonsWare

+0

ОК. не проблема. вы оказали большую помощь до сих пор в любом случае. Спасибо. – DArkO

0

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

ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(3); 

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

yourAsynTask.executeOnExecutor(threadPoolExecutor, params); 

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

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

threadPoolExecutor.shutdown() 
Смежные вопросы