2014-09-25 5 views
3

У меня есть недоразвитость приложения, и мне нужно сделать 3 HTTP POST в последовательности. Каков наилучший способ реализации этого? Должен ли яНесколько HTTP POST в последовательности

  1. сделать каждый HTTP Post в нем собственных Асинхронном классе и гирляндных классах Async (т.е. вызвать второй асинхр из onPostExecute первых асинхронный)

  2. Поместите все HTTP Соощения в doInBcakGround одного Async.

Я знаю, как выполнить запрос HTTP POST, и я использую библиотеку OKHTTP. Я просто хотел бы знать, что лучшая практика для нескольких POST в последовательности.

Приветствия

+0

использование Google Volley Библиотеку для запроса несколько запроса в то время .http: //captechconsulting.com/blog/clinton-teegarden/android-volley-library-tutorial – Ruban

ответ

2

Ваш первый подход будет лучше и вполне модульное, как вы можете быть в курсе что-нибудь в вашем application.In три разные AsyncTask вы можете иметь чек postExceute() то, что AsyncTask является сделано с его работой (более легко и точно) и

>>>>> В случае, если приложение получает Разбился

, а затем из httpPost не удалось. Тем не менее, второй сделает ваш код грязным, и вы не сможете отслеживать при получении Exception то, что httpPost запрос не выполнен (в прямом направлении).


Так Запуск ваш второй AsyncTask из onPostExecute вашей первой задачей будет лучше подход.

Смотрите здесь: Calling an AsyncTask from another AsyncTask

+0

I я собираюсь с этим сейчас. Я могу вернуться к ответу Листала Сурьяна позже. – DrkStr

+1

Happy Coding ... :) – nobalG

0

И 1 и 2 подход делает приложение ANR, так что лучше для другого подхода.

Вы можете использовать ExecutorService, который выполняет каждую отправленную задачу, используя один из, возможно, нескольких объединенных потоков, обычно настраиваемых с использованием стандартных методов Executors.

Пулы потоков адресуют две различные проблемы: они обычно обеспечивают улучшенную производительность при выполнении большого количества асинхронных задач из-за сокращения служебных издержек на одну задачу и обеспечивают средства для ограничения и управления ресурсами, включая потоки, потребляемые, когда выполнение набора задач. Каждый ThreadPoolExecutor также поддерживает некоторую базовую статистику, такую ​​как количество завершенных задач.

здесь больше deatias http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html

+0

** ANR ** для первого подхода? Я так не думаю, (если с осторожностью обращаться) – nobalG

+0

да, его проблема, но ваша проблема заключается в том, чтобы сделать 3 http-вызова, здесь ссылка на anr http://stackoverflow.com/questions/13053611/application- not-replying-anr-executing-service-android –

+0

@SheetalSuryan Вы получаете только ANR, если запустите его в основном потоке пользовательского интерфейса, я делаю HTTP-запросы в фоновом потоке. Кроме того, я быстро прочитал об ExecutorService. Из того, что я могу сказать, используются только в том случае, если вы хотите выполнить одновременно, это правильно. – DrkStr

0

Поместите все HTTP-сообщения в doInBcakGround одного Async.

потому что все ваши сообщения обрабатываются в одном модуле.

Доза не имеет накладных расходов на создание asyntask, и GC может не называть столько, сколько ваш первый.

вам не нужно, чтобы проверить подключение к Интернету в 3 раза вы должны проверить это один раз

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

В конце концов, я предпочитаю подход 2.

+0

Вы не думаете вызывать три ** httpPosts ** вместе в AsyncTask будут накладными расходами (я не говорю, что это невозможно). Но не эффективный способ EVEN, если рассматривается контекст обработки исключений. – nobalG

+0

@Butterflow приветствуется с ответом, но у него нет накладных расходов на создание 3 потоков. доза не имеет накладных расходов на создание 3 гнезд. – mmlooloo

+0

Создание потоков не является накладными расходами, но обработка исключений - это .. :) – nobalG

Смежные вопросы