Поддерживает ли Android несколько HTTP-запросов одновременно?
В моем приложении я хотел бы обрабатывать загрузку нескольких файлов одновременно. Для этого я запускаю несколько сервисов, по одному на каждый запрос. Как я не уверен, поддерживает ли Android одновременные HTTP-запросы параллельно?
В этом случае, хорошо или плохо иметь один HTTPClient на запрос?
Большое спасибо за вашу помощь!
3 ответа
HttpClient не является асинхронным и не поддерживает параллельные соединения как таковые. Вы можете иметь несколько потоков, каждый из которых выполняет загрузку с отдельными экземплярами HttpClient.
Вы также можете посмотреть на ExecutorService: http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
При наличии диспетчера соединений пула, такого как ThreadSafeClientConnManager
, HttpClient
может использоваться для одновременного выполнения нескольких запросов с использованием нескольких потоков выполнения.
Вот полный пример того, как его использовать: 2.9. Многопоточное выполнение запроса.
Обновление: прошло некоторое время, но ThreadSafeClientConnManager
в настоящее время устарела (см. выдержку ниже из Apache Http Client Removal):
Релиз Android 6.0 убирает поддержку HTTP-клиента Apache. Если ваше приложение использует этот клиент и предназначено для Android 2.3 (уровень API 9) или выше, используйте вместо этого класс HttpURLConnection. Этот API более эффективен, поскольку он уменьшает использование сети за счет прозрачного сжатия и кэширования ответов и минимизирует энергопотребление.
Проведите некоторое тестирование, чтобы определить, сколько параллельных HTTPRequests работает хорошо.
Я рекомендую запускать один сервис и иметь несколько потоков, а не несколько сервисов.