Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

Open Source библиотека Enroscar — всем Android-разработчикам

На протяжении трех лет работы в сфере разработки мобильных приложений, часто сталкиваешься с однотипными задачами. Например, работа с серверным API, который меняется в зависимости от типа задачи. Всё, что было наработано за несколько лет командой Stanfy, вошло в Open Source библиотеку Enroscar, которая была уже доступна на Google code. Все данные, которые вошли в эту библиотеку, мы активно используем во всех наших Android проектах.

Библиотека «Enroscar» — это решение, направленное на разработку клиент-серверных приложений и упрощающее работу с внешними API. На базе Enroscar были созданы такие Android приложения, как Кинопоиск, Djuice Music, Обозреватель.

Работа с API

Самый главный и удобный инструмент — это Frame Work для работы с API. Он включает в себя основное ядро, сервис, который работает асинхронно, в отдельном потоке и посредством набора необходимых Callback взаимодействует с активностями и фрагментами.

Вы можете создавать необходимые запросы, формировать на основе описания этих запросов и соответствующих баз RequestDescription, строить запросы при помощи классов RequestBuilder. Фактически, вы работаете с API при помощи BoundService. Из коробки поддерживается JSOM и XML c соответствующей реализацией.

Работа с изображениями

Еще один интересный инструмент — это ImagesManager. Это такой набор классов, которые отвечают за загрузку изображений по http. Достаточно часто возникает необходимость подгрузки изображений с сервера или с веба. Такие загрузки лучше делать в отдельном потоке, асинхронно. FrameWork решает многие проблемы, связанные с загрузкой изображения.

В библиотеке есть специальная двухуровневая система Cache. Изображения можно кешировать в память телефона или на SD карту, и соответствующие инструменты для работы с Cache.

Набор кастомных Views был сделан при возникновении различных проблем. В частности есть немного расширенный ImageView, который поддерживают набор декораторов. Есть уже готовый набор декораторов, где можно накладывать изображение, менять его или создать свой набор.

Другие примеры View — GalleryView, он оптимизирует стандартный Gallery. Есть также набор ScrollView , который сохраняет свою позицию после переворотов.

Базовые активности

Когда вы работаете с приложениями, чаще всего у вас есть одна, две базовые активности. В нашей библиотеке эта концепция тоже реализована и поддерживается на уровне ядра. У вас есть общее поведение для активности, например, какая-то базовая активность, и поведение базовой активности, которое можно модифицировать. Такое поведение будет общим для всех ваших активностей и фрагментов в вашем приложении.

Интеграция статистики

Поддерживается интеграция с инструментами сбора статистики. В частности интегрирован менеджер Flurry, но есть адаптер, который позволяет реализовать свои менеджеры по сбору статистике.

Музыкальные сервисы

Есть несколько интересных классов: сервис для воспроизведения музыки, реализации компонентов, связанных с аудио фокусом. Например, при входящем звонке музыка в плей листе приглушается или приостанавливается, для того, чтобы пользователь мог слышать телефонный звонок.

Оптимизация работы с API

Подробнее хотелось бы рассказать о том, как реализована работа с API.

Есть активность или фрагмент, который необходимо взаимодействовать с сервером по абстрактному API. Ключевое понятие — это API Methods Support, класс, который отвечает за выполнение вашего запроса. Он содержит метод performRequest, в который приходит описание запроса. Важный компонент — ApplicationService, он реализует взаимодействие с API в асинхронном режиме. После того, как пришло сообщение в сервис, происходит обращение к классу RequestMethod, последний отвечает за отправку HTTP-запроса.
Отправляет запрос RequestMethod, для него нужна своя реализация, но есть тесты и примеры, как это делать.

После того, как ответы от сервера были получены, их нужно каким-то образом обработать. RequestMethodHandler отвечает за ваше взаимодействие с серверным API. Это может быть XML JSON или ваша реализация.

После того, как мы получили модель, появляется понятие ParserContext — это своеобразное хранилище, куда складываются все ваши объекты, в том состоянии, в котором вы получили их от сервера. ParserContext знает как их надо обработать и что при этом происходит.

ContextAnalyzer — это класс, который отвечает за пост обработку запроса. Например, вы отправили запрос, получили ответ. Теперь вы можете использовать готовую модель или дополнительно её обработать. Для чего это делается? Например, для того, чтобы положить в базу данных какие-то значения. Для этого используется ContextAnalyzer. Он может реализовываться для разных ParserContext, но вы можете сделать и свою пост обработку, при помощи ContextAnalyzer или другого инструмента. Посредством методов Callback результат через ApplicationService и API Methods Support приходит в активность в виде модели, с которой вы уже можете работать. Есть готовый набор Callback, которые вам понадобятся. Они подскажут, как обработать эту модель, что произошло, был ли ответ ошибочным, успешным и так далее.

В библиотеке есть Application класс, который реализует взаимодействие с ImagesManager и поддержку работы с API. Для того, чтобы ваше приложение корректно интегрировалось с библиотекой кроме стандартных вещей необходимо наследоваться от класса Application и определить Authority для работы с базой данных и Cache.

Примеры работы с библиотекой можно увидеть на Google Code.

В Open Source библиотеке «Enroscar» от Stanfy собраны примеры проектов и тесты модулей для наглядных примеров работы с запросами API сервера. Мы планируем активно работать над расширением библиотеки и созданием документации к ней в ближайшее время.

Была ли вам полезна наша библиотека? Ждем ваших комментариев.

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn



6 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

а github.com/...eppler/ignition (он же droid-fu) нельзя было развивать, обязательно свое делать :)

Посмотрел...если честно, дилетанство. Практически все кривое и полурабочее, а реализация многих элементарных вещей громоздкая и неэффективная . Даже не знаю кому может пригодиться библиотека за пределами вашей команды, ее универсальность весьма и весьма спорная.

Слабовато как-то для «3-х лет мобильной разработки»

Згоден, що сирувато. Ми намагалися це відобразити у номері версії — 0.1.
Для нас робота з розробкою публічної бібліотеки — справа нова. І зараз для нас дуже важливо отримати зворотній зв’язок від людей, які б спробували її також у ділі та дали конструктивні коментарі, зауваження, критику.
Конструктивізм можна висловлювати у формі ісь на Google Code, коментарях до коду там же, або у постах на групі для обговорення бібліотеки.

Будемо за все це дуже вдячні.

"

В библиотеке есть специальная двухуровневая система Cache. Изображения можно кешировать в память телефона или на SD карту, и соответствующие инструменты для работы с Cache.

"

Который к сожелению не работает, например хотя бы в связи с этим

/** Cache map. */ private final ConcurrentHashMap<string, softreference<bitmap="">> cacheMap;

см. code.google.com/...detail?id=20015

/** How to ellipsize. */ private static final String ELLIPSIS = "...";

— «...» (лучше спец символ в юникоде)

uses-sdk android:minSdkVersion="4" и setChildrenDrawingOrderEnabled(true);а джарник вообще от 2.3.3.
Пытылся я как то хакнуть так андроид — толку не будет.

И т.д.

Очень сыро, часть вообще не будет работать. И честно говоря немного спорно по причине огромного количества разрозненого кода.

Хотя возьму себе на заметку, спасибо.

PS Поповоду вынесения сетевого движка в отдельный сервис — спорный вопрос по множеству причин (например вы не сможете вешать на входящий стрим потоковый парсер, вы вынуждены будете сначала все выкачать). Да и реализация сложновата — сервисы чудестно биндятся вместе с ResultReceiver.

У бібіотеці пристуні дві реалзіації кешу в пам’яті. Ви писали про SoftImageMemoryCache. І він дійсно не працює так, як хотілося б. Інша реалізація, яка використовується за замовчуванням — StatisSizeImageMemoryCache. Вона основана на LinkedHashMap.

Найближча нова версія бібліотеки повинна буде використовувати LruCache, який доступний в новому АПІ та Support Package, якщо він, звісно, виправдає наші очікування :)

Стосовно

android:minSdkVersion="4″

Виправимо, там має бути 7.

Смотрел библиотеку, у нас за 1.5 года и 20+ андроид проектов аналогичные решения скопились.

Только стоит ли всю либу в каждый проект брать(особенно для клиент-серверного общения) ?

Ведь все проекты хоть и не сильно, но отличаются — и адаптированая иерархия классов гораздо проще универсальной выходит. А то может получиться что «когда в руках молоток — каждая проблема кажется гвоздем»

Підписатись на коментарі