Как стать автором
Обновить
0
0
Олександр Катрич @Warble

Android developer

Отправить сообщение

Kotlin Multiplatform. Работаем с асинхронностью на стороне iOS. Publishers, async/await

Время на прочтение6 мин
Количество просмотров6.2K

Всем доброго времени суток! С вами Анна Жаркова, ведущий разработчик компании Usetech. Продолжаем говорить про Kotlin Multiplatform и работу с асинхронными функциями. В этой статье мы будем рассматривать, как можно удобно подключать Kotlin общий код на стороне iOS, используя возможности Swift. А именно, как работать с Combine Publishers и новым async/await.

* Примеры кода доступны в полной версии статьи, и к сожалению, не доступны в предпросмотре

Концепция Kotlin Multiplatform позволяет нам сделать код максимально общим, т.е вынести практически все в общую часть.

Если на стороне common, мы оперируем корутинами и suspend функциями, то на стороне iOS проекта нативного благодаря поддержке interop Kotlin/Obj-C с версии Kotlin 1.4 suspend функции преобразуются в функции с completion handler.

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

Однако, не все любят простой синтаксис completion handler. А еще мы прекрасно знаем, что если ими злоупотреблять, можно легко попасть в ситуацию callback hell и потерять читабельность и чистоту кода.

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

Попробуем сделать наш Kotlin код совместимым с Combine Publishers. Для этого превратим вызов нашей suspend функции в AnyPublisher с использованием Future Deferred и Promise.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии6

Анимация в Android: плавные переходы фрагментов внутри Bottom Sheet

Время на прочтение19 мин
Количество просмотров17K
Написано огромное количество документации и статей о важной визуальной составляющей приложений — анимации. Несмотря на это мы смогли вляпаться в проблемы столкнулись с загвоздками при её реализации.

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


Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии17

Как сделать цветные тени в Android с градиентом и анимацией

Время на прочтение3 мин
Количество просмотров8.2K

На презентации новых макбуков обратил внимание на картинку процессора: переливающиеся цветные тени на темном фоне. Давайте нарисуем на Android такие-же

Читать далее
Всего голосов 13: ↑13 и ↓0+13
Комментарии7

Делаем Android View Binding удобным c Kotlin

Время на прочтение3 мин
Количество просмотров32K

Привет! Меня зовут Кирилл Розов. Я автор Telegram канала Android Broadcast. Очень люблю Kotlin и мне нравится с помощью его возможностей упрощать разработку. С такой задачей я недавно столкнулся, когда на новом Android проекте начали использовать View Binding.


image

Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Как прошёл п̶е̶р̶в̶ы̶й̶ второй митап по Android от Tinkoff

Время на прочтение3 мин
Количество просмотров5K
Всем привет!

Я — Александр Гузенко, ведущий разработчик в компании Тинькофф. И так сложилось, что я постоянно топлю за какую-то движуху по шарингу знаний, курирую финтех школу по андроиду и люблю ходить на конференции и митапы.

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


Всего голосов 20: ↑19 и ↓1+18
Комментарии2

Система получения копии памяти в устройствах под управлением Android через беспроводные каналы связи

Время на прочтение13 мин
Количество просмотров5.1K

Введение


Мобильные устройства — смартфоны, планшеты и прочие мобильные устройства — становятся неотъемлемой частью жизни людей. Почти у 67% людей в мире есть хотя бы один смартфон; к 2025 году прогнозируется 5,8 миллиардов активных мобильных устройств [1].


По данным IDC [2], среди всех проданных в третьем квартале 2018 года мобильных устройств 86,8% были оборудованы ОС Android. Количество пользователей использующих ОС Android более 1.4 миллиардов. По данным Securelist [3], за 2018 год было обнаружено 5,3 миллионов вредоносных программных пакетов для ОС семейства Android. Поэтому специалисту, в области компьютерной криминалистики, приходится для каждого устройства использовать разные методы извлечения копии памяти.


В настоящее время способа однообразного получения копии памяти с устройств под управлением ОС Android не существует. В связи с этим, специалисту в области компьютерной криминалистики приходится использовать множество различных методов, где он и сталкивается с технически-ми проблемами. В первую очередь проблемы связанны с отсутствием драйвера или с неисправностью USB разъема, используемых в традиционных методах для извлечения данных. Однако для получения и передачи копии памяти можно использовать беспроводные каналы связи [4].

Читать дальше →
Всего голосов 11: ↑9 и ↓2+7
Комментарии3

MotionLayout: анимации лучше, кода — меньше

Время на прочтение10 мин
Количество просмотров34K

Google продолжает улучшать нашу жизнь, выпуская новые удобные библиотеки и API. Среди которых оказался и новый MotionLayout. Учитывая обилие анимаций в наших приложениях, мой коллега Cedric Holtz сразу же реализовал важнейшую анимацию нашего приложения — голосование в знакомствах — с использованием нового API, сэкономив при этом огромное количество кода. Делюсь переводом его статьи. 

Недавно закончилась конференция Google I/O 2019, на которой анонсировали обновления и самые свежие улучшения нашего любимого SDK. Лично мне особенно интересна была презентация Николаса Роарда и Джона Хофорда о будущей функциональности ConstraintLayout. А точнее, о его расширении в виде MotionLayout. 

После выпуска бета-версии мне захотелось реализовать анимацию знакомств на основе этой библиотеки.
Читать дальше →
Всего голосов 37: ↑32 и ↓5+27
Комментарии6

Безопасная передача данных между двумя приложениями

Время на прочтение5 мин
Количество просмотров9.1K
Всем привет, сегодня я хотел бы вам рассказать о некоторых вариантах передачи данных между двумя андроид приложениями и рассмотреть их с точки зрения безопасности. Я решил написать эту статью по двум причинам. Первая — я начал часто сталкиваться с непониманием разработчиков механизмов работы компонентов андроид приложения. Вторая — я перестал понимать на чем основан выбор того или иного механизма при реализации фич и захотел донести, как он должен выглядеть на минималках.
Читать дальше →
Всего голосов 21: ↑18 и ↓3+15
Комментарии3

Навигация для Android с использованием Navigation Architecture Component: пошаговое руководство

Время на прочтение6 мин
Количество просмотров38K
Попробуем, пользуясь официальным руководством и примерами кода, построить работающую систему навигации для будущего многоэкранного приложения в соответствии со стандартами Navigation Architecture Component. Статья включает следующие разделы:

Часть 1. Подготовительные работы
— 1.1. Создание проекта
— 1.2. Зависимости (Dependencies)
— 1.3. Страницы: создание фрагментов
— 1.4. Адреса: файл ресурсов типа «Navigation»
— 1.5. Фрейм: виджет NavHostFragment

Часть 2. Элементы навигации
— 2.1. Навигация с помощью кнопок
— 2.2. Боковое меню (Drawer)
— 2.3. Панель инструментов: Toolbar вместо ActionBar
— 2.4. Нижнее меню (Bottom Navigation)
— 2.5. Всплывающее меню (Overflow Menu)

Краткие выводы и ссылка на github
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии5

Jenkins для Android сборки, с помощью Docker

Время на прочтение14 мин
Количество просмотров14K
Всем привет!

Я работаю андроид разработчиком, и не так давно мы столкнулись с некоторыми рутинными задачами на своем проекте, которые хотелось бы автоматизировать. Например у нас 5 разных flavor, для каждого из которых требуется загружать свой билд на fabric, иногда для разных тасок по несколько раз в день. Да эту задачу можно сделать и с помощью gradle таски, но хотелось бы не запускать этот процесс на машине разработчика, а делать это как-то централизовано. Или например автоматически заливать билд в google play в бету. Ну и просто хотелось поковырять CI систему. Что из этого получилось, и как мы это настраивали, зачем там Docker, далее в статье.


Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии16

RxJava2 + Retrofit 2. Модифицируем адаптер для обработки состояния отсутствия интернета на Android

Время на прочтение4 мин
Количество просмотров9.9K


Довольно часто необходимо делать повторные запросы в сеть, например, когда у пользователя не было интернета и он захотел получить данные из интернета. Неплохо бы было заново кинуть запрос при его появлении. Хорошая практика — показать пользователю определенный UI, который объяснил бы ему что произошло и позволил бы заново кинуть запрос. Добавление такой логики может быть довольно болезненной, особенно, когда у нас огромное множество ViewModel классов. Конечно, можно реализовать логику резапросов в каждом ViewModel классе, но это не удобно и возникает огромная вероятность появления ошибок.
Читать дальше →
Всего голосов 11: ↑10 и ↓1+9
Комментарии1

Геолокация без GPS (часть 2)

Время на прочтение4 мин
Количество просмотров24K
wifi Здравствуйте!
После предыдущей статьи (часть 1) я получил много отзывов о работе открытого API геолокации по WiFi и вышкам мобильных сетей.
В этот раз я хочу представить свои исправления, лицензирование проекта, геопозиционирование по нескольким точкам доступа, кейсы использования и самое главное — текущие проблемы
Узнать больше
Всего голосов 16: ↑13 и ↓3+10
Комментарии8

Кэшируем пагинацию в Android

Время на прочтение28 мин
Количество просмотров22K

Наверняка каждый Android разработчик работал со списками, используя RecyclerView. А также многие успели посмотреть как организовать пагинацию в списке, используя Paging Library из Android Architecture Components.


Все просто: устанавливаем PositionalDataSource, задаем конфиги, создаем PagedList и скармливаем все это вместе с адаптером и DiffUtilCallback нашему RecyclerView.


Но что если у нас несколько источников данных? Например, мы хотим иметь кэш в Room и получать данные из сети.


Кейс получается довольно кастомный и в интернете не так уж много информации на эту тему. Я постараюсь это исправить и показать как можно решить такой кейс.


image

Читать дальше →
Всего голосов 3: ↑3 и ↓0+3
Комментарии4

Cохранение состояний в android приложениях

Время на прочтение5 мин
Количество просмотров13K
Сегодня я хотел поделиться с вами еще одним подходом сохранения состояния при разработке android приложений. Не для кого не секрет, что наше приложение в фоне может быть убито в любой момент и эта проблема становится все актуальнее с вводом агрессивного энергосбережения – привет Oreo. Также никто не отменял смену конфигурации на телефоне: ориентация, смена языка и т.д. И чтобы открыть приложение из бэкграунда и отобразить интерфейс в последнем состоянии нам нужно позаботиться о его сохранении. Ох уж этот onSaveInstanceState.

onSaveInstanceState

Сколько боли он нам принес.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+11
Комментарии12

Информация

В рейтинге
Не участвует
Откуда
Украина
Зарегистрирован
Активность

Специализация

Mobile Application Developer
Senior
От 6 500 $
Java
Kotlin
Android development