- Библиотеки
- Описания популярных библиотек
- Библиотеки для загрузки изображений с котиками
- Графики и диаграммы
- Какую библиотеку работы с HTTP в Android выбрать?
- Для чего это вообще?
- Немного истории
- Русские Блоги
- Сравнение библиотеки запроса сети Android
- Mainstream Network Library Library — Введение
- Классификация сетевых кадров
- HttpClient
- HttpURLConnection
- Httpclient и httpurLconnection, какой клиент лучше?
- Volley
- okhttp
- Retrofit
Библиотеки
Java-библиотеки позволяют хранить код для какой-то задачи в одном месте и использовать в разных проекта, просто подключая её.
В Android Studio библиотека подключается через Gradle. Просто добавляем строку в блок с зависимостями и студия сама скачает и установит библиотеку.
Описания популярных библиотек
Библиотека EventBus — рассылаем и реагируем на события.
joda-time-android — Популярная библиотека Joda-Time для Android, позволяющая работать с датой и временем.
AndroidSlidingUpPanel — выдвигающая панель сверху или снизу.
Rebound — библиотека для создания анимационных эффектов у компонентов
GSON — библиотека для работы с JSON.
Moshi — современная библиотека для работы с JSON.
Card Library — интересная библиотека для создания карточек. Автор библиотеки рассказывает о ней на своей странице. А на ГитХабе сама библиотека в исходных кодах. Сам ещё не использовал, но демо библиотеки мне понравилось.
svg-android — работа с векторными изображениями SVG
Android-Query (AQuery) — простой способ использования асинхронных задач и управления UI-элементами
Библиотека Okio для операций ввода/вывода
Библиотеки для загрузки изображений с котиками
Picasso — библиотека для загрузки изображений с разнообразным функционалом.
Glide — похожа по синтаксису и функционалу на Picasso. Библиотека поддерживает анимированные GIF-файлы.
Universal Image Loader — библиотека для загрузки изображений из сети или локальных носителей
koush/ion — и ещё одна популярная библиотека для асинхронных соединений и загрузок изображений.
Fresco | An image management library — Facebook тоже решил внести свою лепту в создании библиотеки для загрузки изображений.
Coil — относительно новая библиотека на Kotlin с корутинами.
Графики и диаграммы
AChartEngine — библиотека для рисования графиков
GraphView — ещё одна библиотека для графиков. Доступны два вида. Встраивается в разметку активности через код.
HoloGraphLibrary — Ещё одна библиотека для рисования графиков.
blackfizz/EazeGraph — и ещё одна библиотека с разными типами графиков.
Источник
Какую библиотеку работы с HTTP в Android выбрать?
Представляю вашему вниманию перевод статьи «Which Android HTTP library to use?».
Для чего это вообще?
Немного истории
До Froyo HttpURLConnection имел некоторые не очень приятные баги. В частности, вызов close() у читаемого InputStream мог испортить пул соединений.
… большой размер их API мешает нам улучшать эту библиотеку без потери обратной совместимости. Команда Android не работает активно над Apache HTTP Client.
Apache HTTP client имеет мало багов на Eclair и Froyo, поэтому он является лучшим выбором для этих версий. А для Gingerbread и младше лучше подходит HttpURLConnection. Простота API и небольшой вес хорошо подходят для Android. Прозрачное сжатие и кэширование ответов помогают увеличить скорость и сохранить батарею. Новые приложения должны использовать HttpURLConnection.
Даже сегодня, если вы загляните в исходники Volley от Google (о ней я расскажу чуть попозже), вы сможете найти такое наследие:
Это классический пример фрагментации Android, которая заставляет страдать разработчиков. В 2013 году Square обратила внимание на эту проблему, когда выпускала OkHttp. OkHttp была создана для прямой работы с верхним уровнем сокетов Java, при этом не используя какие-либо дополнительные зависимости. Она поставляется в виде JAR-файла, так что разработчики могут использовать ее на любых устройствах с JVM (куда мы включаем, конечно, и Android). Для упрощения перехода на их библиотеку, Square имплементировали OkHttp используя интерфейсы HttpUrlConnection и Apache client.
OkHttp получила большое распространение и поддержку сообществом, и, в конце-концов, Google решили использовать версию 1.5 в Android 4.4 (KitKat). В июле 2015 Google официально признала AndroidHttpClient, основанный на Apache, устаревшим, вместе с выходом Android 5.1 (Lolipop).
Сегодня OkHttp поставляется со следующим огромным набором функций:
- Поддержка HTTP/2 и SPDY позволяет всем запросам, идущим к одному хосту, делиться сокетом
- Объединение запросов уменьшает время ожидания (если SPDY не доступен)
- Прозрачный GZIP позволяет уменьшить вес загружаемой информации
- Кэширование ответов позволяет избежать работу с сетью при повторных запросах.
- Поддержка как и синхронизированных блокирующих вызовов, так и асинхронных вызовов с обратным вызовом (callback)
Моя самая любимая часть OkHttp – как красиво и аккуратно можно работать с асинхронными запросами:
Это очень удобно, так как работа с сетью не должна быть в UI потоке. По-факту, начиная с Android 3.0 (Honeycomb, API 11), работа с сетью в отдельном потоке стала обязательной. Для того, чтобы воплотить что-то похожее с HtttpUrlConnection, вам потребуется построить большую (а может и монструозную) конструкцию с использованием AsyncTask или отдельного потока. Это будет еще более сложным, если вы захотите добавить отмену загрузки, объединение соединений и т.п.
Кстати, не осталась у обочины и HTTP библиотека от Google под названием Volley, которая предоставляет нам следующие бонусы:
- Автоматическое планирование сетевых запросов
- Множество параллельных сетевых соединений
- Прозрачное кэширование в памяти и на диске, в соответствии со стандартной кэш-согласованностью.
- Поддержка приоритизации запросов.
- Отмена API запросов. Вы можете отменить как один запрос, так и целый блок.
- Простота настройки, например, для повторов и отсрочек.
- Строгая очередность, которая делает легким корректное заполнение данными, полученными асинхронно из сети, интерфейса пользователя.
- Инструменты отладки и трассировки
Все, что ни есть в Volley, находится на вершине HttpUrlConnection. Если вы хотите получить JSON или изображение, то Volley имеет на это специальный абстракции, такие как ImageRequest и JsonObjectRequest, которые помогают вам в автоматическом режиме конвертировать полезную нагрузку HTTP. Так же достойно внимания то, что Volley использует жестко запрограммированный размер сетевого пула:
Когда OkHttp использует поток для каждого вызова с ThreadPoolExecutor с максимальным значением Integer.MAX_VALUE:
В результате, в большинстве случаев OkHttp будет действовать быстрее за счет использования бОльшего количества потоков. Если по каким-то причинам вы захотите использовать OkHttp вместе Volley, то есть реализация HttpStack, которая использует API запросов/ответов из OkHttp заместо HttpURLConnection.
HTTP клиенты продолжили развиваться для поддержки приложений с большим количеством картинок, особенно тех, кто поддерживает бесконечную прокрутку и трансформацию изображений. В то же время, REST API стал стандартом в индустрии, и каждый разработчик имел дело с такими типовыми задачами как сериализация в/из JSON и преобразование REST-вызовов в интерфейсы Java. Не прошло много времени, как появились библиотеки, решающие эти задачи:
- Retrofit – типобезопасный HTTP Android клиент для взаимодействия с REST-интерфейсами
- Picasso – мощная библиотека для загрузки и кэширования изображений под Android
Retrofit предоставляет некий мост между Java кодом и REST-интерфейсом. Он позволяет быстро включить в ваш проект HTTP API интерфейсы, и генерирует самодокументирующуюся реализацию.
В дополнение ко всему, Retrofit поддерживает конвертацию в JSON, XML, протокол буферов (protocol buffers).
Picasso, с другой стороны, предоставляет HTTP библиотеку, ориентированную на работу с изображениями. Например, вы можете загрузить изображение в свой View с помощью одной строчки:
Picasso и Retrofi настроены так, чтобы использовать OkHttpClient как стандартный HTTP клиент. Однако, если хотите, вы можете указать клиентом HttpURLConnection.
Glide – что-то похожее на Picasso. Он предоставляет некоторые дополнительные функции, такие как GIF-анимация, генерация миниатюрных эскизов изображения и неподвижные видео. Полное сравнение можно найти здесь.
Facebook недавно открыли общественности исходный код библиотеки Fresco, которую они используют в своем мобильном приложении. Одна из ключевых функций, которая выделяет ее, — кастомная стратегия выделения памяти для bitmap’ов, чтобы избежать работы долгого GC (сборщик мусора). Fresco выделяет память в регионе, который называется ashmem. Используются некие трюки, чтобы иметь доступ к этому региону памяти доступ как из части, написанной на C++, так и из части на Java. Чтобы уменьшить потребление CPU и данных из сети, эта библиотека использует 3 уровня кэша: 2 в ОЗУ, третий во внутреннем хранилище.
Я нашел необходимым показать отношения между библиотеками на одной схеме. Как вы можете увидеть, HTTP всегда остается внизу у высокоуровневых библиотек. Вы можете выбирать между простым HttpUrlConnection или последним OkHttpClient. Мы используем эту совместимость при разработке PacketZoom Android SDK, о котором мы поговорим в следующем посте.
Недавно мы сравнивали между собой HTTP библиотеки по производительности, но эта тема заслужила отдельного рассмотрения. Мы надеемся, что этот обзор дал вам основные идеи о плюсах и минусах каждой библиотеки, и мы помогли вам сделать правильный выбор. Следите за выходом более интересных постов о сетевой работе в Android от нас.
Источник
Русские Блоги
Сравнение библиотеки запроса сети Android
Mainstream Network Library Library — Введение
В наши дни, основной структуру сети запросов на Android:
В основном проанализированы следующие рамки
- HttpClient
- HttpURLConnection
- Volley
- OkHttp
- Retrofit
Классификация сетевых кадров
Нижняя сетевая рамка
HttpClient, httpurLConnection, OKHTTP относится к базовой сети, эти рамки являются нижним слоем действительно инициируют HTTP-запросы.
Упакованная сетевая рамка
Залп, модернизация принадлежит к инкапсуляции базовой сети, такой как внутреннее использование залп, является httpurLConnection и httpClient, модернизация основана на OKHTTP.
Большой и полный кадр
Афанальные и ксуты и т. Д., В том числе сетевые рамки, база данных, нагрузка на картинку и т. Д., Не рекомендуется использовать этот тип структуры, плохого обслуживания, и эта структура не делает в каждом модуле.
HttpClient
Вступление
Httpclient — исходная библиотека протокола HTTP, предоставленная Apache, которая рекомендуется использовать httpClient до 2.2.
Официальный блог:
Android’s HTTP Clients
https://android-developers.googleblog.com/2011/09/androids-http-clients.html
(Содержание анализа HTTPClient и HttpurLConnection участвует в этой статье)
преимущество
Богатые особенности, очень стабильные, очень мало ошибок
Недостаток
Многочисленные API могут труднее улучшить в случае обеспечения совместимости, это также главная причина для официального отказа от HttpClient
развитие
2.2 До того, как HTTPClient является лучшим выбором, после 2.3, Poogle Shonient рекомендует использовать HTTPURLCONCOUNTE. Android6.0 после Официального удаления API API Google HttpClient
Httpclient android6.0 Вопросы и решение
Вопрос: Android6.0 после официального API Google удаляет httpClient, продолжать использование httpclient и сетевых библиотек на основе его пакета будет превышать
Решить: объявить следующее время компиляции в файле build.gradle:
android <
useLibrary ‘org.apache.http.legacy’
>
HttpURLConnection
Вступление
HttpurLConnection — это оригинальная библиотека протокола HTTP, предоставленная SUN, которая также является членом стандартной библиотеки Java Java.net.
преимущество
HttpurLConnection — это универсальный легкий клиентский инструмент HTTP для большинства приложений.
Добавлена сжатие (2.3) и кеш (4.0), уменьшение использования сети, повышенная скорость, экономия электричества
Из-за маленького API вы можете сделать улучшение под предпосылкой обеспечения совместимости, которая также является основной причиной для замены httpUrLConnection HttpClient.
2.2 Проблемы и решения
В версии перед Android 2.2 есть некоторые ошибки; особенно в читаемых потоках ввода, BLACK (), загрязняют бассейн
Решить: выключить бассейн, чтобы обеспечить нормальное использование
Httpclient и httpurLconnection, какой клиент лучше?
Резюме: 2.2 До HTTPClient является лучшим выбором, после 2.3 рекомендуется использовать HTTBUrLConnection.
Volley
Вступление
Сеть Framework, запущенная на конференции Google I / O ввода / вывода в 2013 году
VoLley — это библиотека HTTP, которая облегчает и самое главное, проще, и главное, быстрее).
преимущество
(От официального введения)
- Автоматическое планирование сетевых запросов. (Запрос автоматической диспетчерской сети)
- Несколько одновременных сетевых соединений. (Несколько одновременных сетевых подключений)
- Кэширование прозрачного диска и памяти, кэширование с помощью стандартного CACHERENCE HTTP Cache Cocherence. (Кэш прозрачной дисковой и памяти, а стандартный консолидация кеша HTTP)
- Поддержка приоритетов запроса. (Приоритет запроса поддержки)
- API запроса на отмену. Вы отмените единый запрос, или вы можете установить блоки или принципы запросов, чтобы отменить. (Доступ к запросу Cancle, вы можете отменить запрос, вы также можете установить блок и диапазон Cancle)
- Простота настройки, например, для повторной попытки и отката. (Может быть легко настроен, например, механизмы повторения и механизмы отката)
- Сильное упорядочение, которое позволяет легко правильно заполнить ваше интернет-интерфейс с помощью привлеченных данных. (Строгий заказ облегчает использование данных, которые вы можете использовать, чтобы получить UI правильно)
- Инструменты отладки и отслеживания. (Инструмент отладки и отслеживания)
Подходит для
Количество данных не велико, но операция общения частой сети, общий запрос сети в приложении принадлежит этому
Неподходящий
Volley is not suitable for large download or streaming operations, since Volley holds all responses in memory during parsing.
Не подходит для больших загрузок или потоковых операций, потому что залп хранит все ответы во время процесса анализа в памяти.
Интеграция залп httpClient и httpurLconnection
В Android 2.3 и выше, используйте httpurLConnection и используйте httpClient в Android 2.2 и ниже.
HURLSTACK и HTTPCLINGACK соответствуют httpurLConnection и httpClient, соответственно. Фактически, эти два объекта реализовали интерфейсы httpstack.
Интеграция залп OKHTTP.
Кроме того, мы можем реализовать реализацию HurlStack Integrating OKHTTP
Хист ОХТТ Автор Джейк Уортон:
https://gist.github.com/JakeWharton/5616899
okhttp
Вступление
OKHTTP — это сетевая структура, разработанная квадратом.
(Позже будет подробный анализ статей)
Официальное использование Google
После Android 4.4 HTTHURLConnection реализован на нижнем слое OKHTTP.
преимущество
(От официального введения)
- Поддержка HTTP / 2 позволяет всем запросам один и тот же хост, чтобы разделить сокет. (Все запросы, выданные одному и тому же хосту, могут делиться одному и тому же сокету)
- Пул соединения снижает задержку запроса (если http / 2 недоступен). (Используйте пул соединения для мультиплексных соединений, чтобы повысить эффективность)
- Прозрачные размеры загрузки GZIP сокращаются (при условии поддержки GZIP по умолчанию для уменьшения размера контента передачи)
- Кэширование ответов позволяет полностью избежать сети для запросов на реквитую (механизм кэша для ответа HTTP может избежать ненужных сетевых запросов)
- OHHTTP настойчивы, когда сеть не работает: .. она будет молча оправиться от общих проблем с подключением, если у вашего обслуживания есть несколько IP-адресов OKHTTP, будет пытаться альтернативные адреса, если первый Connect не удается, это необходимо для IPv4 + IPv6, а для сервисов, размещенных в избыточных данных. (Когда есть проблемы с проблемами, OHHTTP автоматически повторит несколько IP-адресов хоста)
- Он поддерживает как синхронные блокирующие вызовы, так и вызовы Async с обратными вызовами. (Поддержка синхронных запросов блокировки и асинхронные запросы)
- OKHTTP поддерживает Android 2.3 и выше. Для Java минимальное требование составляет 1,7. (Поддержка Android2.3 + Java 1.7+)
Retrofit
Вступление
Модернизация такая же, как квадрат, что и OKHTTP. Модернизация — это упакованная сетевая структура. Базовая сетевая структура используется OKHTTP (Retrofit 2.0, не поддерживает другие базовые сетевые кадры).
(Позже будет подробный анализ статей)
преимущество
Модернизация — лучший пакет для HTTP-запросов, который проще, значительно повышает эффективность развития.
Многие из них могут быть настроены, более гибкими, например, вы можете настроить структуру анализа JSON, такие как GSON, Jackson и т. Д.
Поддерживает Rxjava, которая также, поэтому многие люди выбирают его.
RxJava+Retrofit+OkHttp
Это в основном лучший выбор для текущей сетевой структуры.
Источник