Разработка под Android *
Пишем под самую популярную мобильную ОС
- Новые
- Лучшие
- Все
- ≥0
- ≥10
- ≥25
- ≥50
- ≥100
Kotlin Native. Работаем с новой моделью памяти
Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Продолжаем рассматривать способы многопоточный работы в Kotlin Native. В предыдущих статьях мы уже рассмотрели существующие способы работы с многопоточностью с корутинами и без, и что делать с имеющимися болями. Теперь поговорим о новой модели управления памятью, которая появилась совсем недавно.
31 августа компания JetBrains представили превью новой модели управления памятью в Kotlin Native. Основной упор команда разработчиков сделала на безопасность шаринга между потоками, устранение утечек памяти и освобождение нас от использования специальных аннотаций. Также доработка коснулась Coroutines, и теперь можно без опаски переключаться между контекстами корутин без заморозки. Обновления подхватили и Ktor:
Итак, что же нового появится в версии Kotlin 1.6.0-M1-139:
1. Заявлено, что мы можем убрать все freeze() блоки (в том числе и во всех фоновых Worker), и переключаться между контекстами и потоками без каких-либо проблем.
2.Использование AtomicReference или FreezableAtomicReference не приводит к утечкам памяти.
3.При работе с глобальными константами не нужно теперь использовать SharedImmutable.
4.При работе с Worker.execute producer больше не требует возвращать изолированный подграф объектов.
Однако есть и нюансы:
Chipmunk. Обновления
«Привет, Android!», мы «прикрутили» наконец-то adb. Об этом и других обновлениях в смотрелке логов chipmunk.
8 распространенных ошибок при разработке Android-приложений
Экосистема Android стремительно растет по всему миру и распространяется на различные группы людей. Люди из разных слоев общества, люди с ограниченными возможностями, пользователи, которые просто хотят иметь новомодные фичи, такие как ночной режим (темная тема), начинают использовать приложения Android в своей повседневной жизни.
Загружаемые изображения для Jetpack Compose с использованием Glide, Coil и Fresco
Новый современный набор инструментов пользовательского интерфейса Jetpack Compose был анонсирован компанией Google более года назад, и, наконец, в июле была выпущена стабильная версия 1.0. Также многие компании, такие как Twitter, lyft, Square, уже адаптировали Jetpack Compose на своих производственных уровнях, потому что он очень интуитивный, мощный и упрощает всю структуру пользовательского интерфейса, если правильно его использовать. Эта новая парадигма структуры пользовательского интерфейса поменяет в дальнейшем очень многое, также нам придется приложить еще немало усилий для миграции предыдущих вещей, связанных с пользовательским интерфейсом, таких как загрузка изображений из Url.
MultiItem адаптер для RecyclerView в 40 строк кода с BRVAH
Это третья часть цикла статей про разработку адаптеров для RecyclerView c BRVAH.
Прошлые части:
Как мы обновляли мобильное приложение для официантов: выбор стека и тест трех версий. Кто победил?
Привет! Меня зовут Сергей Арсёнов, я руковожу мобильной разработкой в компании r_keeper. Хочу рассказать, как мы обновляли мобильное b2b-приложение для официантов и почему выбрали для него не совсем классический стек — Kotlin Multiplatform Mobile + UI на Flutter.
Оптимизация ресурсов в Android. Ускорение сборки и уменьшение размера APK
Один из эффективных способ ускорения проектов - разделить генерацию R классов по отдельным модулям. Хоть эта возможность уде добавлена давно в Android Gradle Plugin, но её до сих пор не включили по умолчанию. Из статьи вы узнаете как выключить эту фичу и какие результаты по скорости сборки проекта удаётся достичь
Простой Ripple эффект своими руками для Android
Любой Android разработчик работал с кнопками, поэтому видел ripple эффект и всю его красоту.
Иногда хочется реализовать что-нибудь кастомное нежели стандартные вещи, которые уже предоставляются компонентами Material Design.
Поэтому я решил написать наследник AppCompatImageView
и сделать для него свой ripple эффект с минимальным количеством кода.
Сразу выкладываю код:
Автоматизация повышения качества кода в Android
Современные мобильные приложения уже вполне серьезные Enterprise проекты, которые разрабатываются десятками, а то и сотнями разработчиков, содержат в себе множество тысяч строк кода и постоянно меняются и развиваются. Уследить за такой огромной кодовой базой помогает процесс автоматизации проверок кода и работы приложения. Сегодня расскажу о том какие инструменты вы можете использовать, чтобы улучшить стабильность вашего кода и не допускать ошибок, а также сэкономить время коллегам во время pull request.
Вы разрабатываете проект в маленькой команде, а то и вовсе один? Тогда эта статья вам ещё важнее, так как вы скорее всего не настраивали у себя такие проверки, а я расскажу почему это нужно сделать.
Kotlin Native. Работаем с потоками с корутинами и без. Ч2
Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Продолжаем рассматривать способы многопоточный работы в Kotlin Native.
В предыдущей части мы посмотрели некоторые нюансы работы с корутинами, как работать с Worker и AtomicReference.
Еще одним возможным API для работы с многопоточностью является DetachedObjectGraph.
Дайджест интересных материалов для мобильного разработчика #410 (6 сентября — 12 сентября)
Kotlin Native. Работаем с потоками с корутинами и без. Ч1
Всем доброго дня! С вами Анна Жаркова, ведущий мобильный разработчик компании Usetech. Совсем недавно компания JetBrains выпустила preview новой модели управления памятью. Это отличный повод сделать подробный ее разбор на практике, а также сравнить с моделью, используемой в KMM в текущих версиях. Но для начала неплохо было бы поговорить о тех возможностях работы в Kotlin Native, которые мы на практике не используем.
Если вы уже знакомы с тем, как работать с корутинами в Kotlin/Native и/или читали предыдущие статьи 1 и 2 автора, то пролистайте немного вниз. Материал может немного повторяться.
Когда мы работаем с Kotlin и Kotlin Multiplatform, то самым и простым удобным способом для настройки работы с многопоточностью в приложении являются Kotlin Coroutines. Наша задача сводится к настройке скоупов CoroutineScope для запуска корутин и suspend функций в основном потоке и фоновом. Т.к. в разных платформенных версиях языка Kotlin этот механизм реализуется по-разному, то необходимо кастомизировать получение контекста корутин с помощью expect/actual:
Android, жизненый цикл Jetpack компонентов
Руководство по работе с жизненным циклом Android компонентов, рассмотрим базовые понятия, что такое LifecycleObserver, события и состояния жизненного цикла, кастомные LifecycleOwner.
Перевод статьи Lifecycle-Aware Components Using Android Jetpack.
Последняя статья об упрощении recycler view
За всё время существования Recycler View регулярно выходят статьи, рассказывающие о новых путях упрощения работы с этим элементом. Они появляются так часто, что порой удивляешься тому, откуда у людей столько фантазии, чтоб придумывать всё новые и новые способы работы со списками. А потом открываешь статью и удивляешься второй раз, ведь способ-то вовсе и не новый, а что-то подобное уже было в нескольких предыдущих статьях. Так к чему это я?
Не ругайтесь сильно, если эта статья покажется вам знакомой или очевидной. Мне она тоже кажется таковой, но вспомним, что о списках сказано так много, но подобного я не встречал. Либо просто не смог осилить все, чтоб убедиться в обратном. В таком случае можете поругаться. Но сначала прошу под кат.
Оптимизируем отображение 10 000 объектов на карте
В приложении ЦИАН размещены десятки тысяч объявлений о недвижимости. Нашим пользователям важно видеть географическое расположение этих объявлений на карте. Самым популярным способом отображения оказался вариант, когда каждое объявление показано отдельной точкой. Внутри команды такой вариант мы назвали «Горошек на карте».
Проблема в том, что объявлений очень много: в одной только Москве более 10 000. Из-за этого наша карта работала не очень стабильно: при зуме и движении были тормоза, дёргалась и лагала картинка. С этим нужно было что-то делать. Чтобы разобраться в причинах проблем и найти решения, мы засучили рукава и начали копаться в используемых механизмах. Под катом подробно опишем весь путь оптимизации карт в Android-приложении: от постановки задачи до результата.
Интеграция Huawei Mobile Services со второй попытки
Android-разработчики и продакты всей галактики ломают голову над одним важным вопросом — “Нужно ли делать интеграцию HMS?”. В это статьей мы расскажем, как у нас получилось затащить поддержку Huawei Mobile Services в регулярных релизах, пусть и со второй попытки.
Здесь вы найдете актуальные цифры, архитектурно-инфраструктурные решения и подробное описание наши ошибок. У статьи есть видеоверсия, и ее можно посмотреть и послушать, если читать совсем не хочется.
Пагинация и DiffUtils в RecyclerView c BRVAH
Это продолжение цикла статей про упрощение разработки адаптеров для RecyclerView.
В этой части рассмотрю следующие реализации потребностей отображения списков:
· Загрузка изображения из сети, с использованием Glide
· Пагинация (подгрузка списка)
· Удаление элемента
· Удаление и использование встроенного diffUtils
Android in-app purchases, часть 5: серверная валидация покупок
Всем привет, я Кирилл, СТО Adapty. Я делал систему серверной валидации для наших SDK. Серверная валидация позволяет проверить подлинность покупки: устройство обращается к серверам Google за информацией, действительно ли была совершена покупка, и валидна ли она.
Сегодня расскажу про то, как её настроить для приложений на Android.
Это пятая статья из серии, посвящённой подключению покупок в приложениях на Android. Остальные доступны по ссылкам:
1. Android in-app purchases, часть 1: конфигурация и добавление в проект.
2. Android in-app purchases, часть 2: инициализация и обработка покупок.
3. Android in-app purchases, часть 3: получение активных покупок и смена подписки.
5. Android in-app purchases, часть 5: серверная валидация покупок. — Вы тут
Как добавить независимый Dagger Сomponent в иерархию SubComponnet-ов Hilt используя подход «component dependencies»?
Hilt базируется на подходе Subcomponents и описание этих компонентов скрыто от нас, поэтому мы не можем добавить зависимость на внешний компонент используя подход Component Dependencies. Как это обойти описано в статье.
Вклад авторов
-
RoboForm 1900.0 -
alizar 1894.0 -
phillennium 1563.1 -
aleksandrit 1145.6 -
Developers_Relations 938.8 -
vedensky 832.0 -
myshyak 679.6 -
Leono 661.0 -
marks 638.1 -
YourDestiny 622.0