Как вы выполняете 2 и более Observable из RxJava параллельно? Все немного более хитро чем использовать операторы merge и zip. Больше подробностей в статье или смотрите код в следующем посте 👇👇👇
В Android 10 Q появилась возможность захватывать аудио других приложений с помощью AudioPlaybackCapture API.
Например, с помощью этого работает функция Live Caption, которая позволяет отображать субтитры для аудио любого приложения. Также можно стримить игры с устройства со звуком.
Чтобы осуществлять захват аудио, пользователь должен предоставить разрешение, а также вы можете запретить захватить аудио вашего приложения полностью или частично.
Android имеет хорошую систему очистку памяти, которая улучшается с выходом каждой новой версией ОС. Но допустить утечку памяти все также остается возможным. В статье довольно простым языком и наглядными иллюстрациями показывается: 👉 Что такое Stack и Heap 👉 Как очищается память Garbage Collector-ом 👉 Как возникают утечки памяти и как не допускать их 👉 Последствия утечек памяти 👉 Поиск утечек памяти
Современные смартфоны хранят множество нашей личной информации, имеют доступ к рабочим документам и почтам, личной жизни, которую не один пользователь не хотел раскрывать кому угодно. В современном мире разработчику приложений нужно понимать как обеспечивать должный уровень безопасности данных.
Каким образом в Android можно защитить данные от злоумышленников? Стандартные подходы это: 👉 Повышение сложности доступа к данным: хранение их во внутренней памяти устройства, шифрование и пр. 👉Использовать Android keystore system для хранения ключей
Android Academy возвращается в Москву с новым курсом Advanced 🎉. В рамках него вы сможете познакомиться с различными темами из Android разработки на более глубоком уровне.
Курс будет полезен тем кто уже успел окончить курс Fundamentals, так и практикующим инженерам, которые хотят улучшить свои знания в Android разработке.
Вас ждет 6 лекций по 1.5 часа каждые 2-3 недели: 1️⃣ Advanced Multithreading 2️⃣ Optimizations 3️⃣ Advanced & Secure Networking 4️⃣ Advanced Architecture 5️⃣ DI: How to and why 6️⃣ Android Internals
С приходом билд системы на основе Gradle в Android появилась возможность использования BuildConfig - специального класса, в котором содержится ряд стандартных констант (версия, buildVariant и пр.) так и имеется возможность добавлять свои собственные из Gradle скриптов.
Проблема в том, что описывать множество таких констант для разных buildType и productFlavor не является удобным. Для решение этой проблемы я нашел удобный Gradle плагин, который позволяет описывать константы в property файлах, расположенных в соответствующей buildType и productFlavor папке в исходниках.
Boilerplate код - это неприятное для любого программиста часть кода. Оно тратит время и добавляет лишний код, затрудняя читабельность кода. Все это влияет на стоимость конечной разработки, что не нравится бизнесу.
Самый популярный boilerplate код, который можно встретить это архитектура: MVVM, MVP, Clean Architecture и пр. Дело в том что этот код имеет одинаковое строение и много схожего API. Так почему бы не избавиться от этого и сделать генерацию каркаса архитектуры фичи с помощью IDE?
Хорошая новость в том, что Android Studio уже содержит необходимый функционал. В статье вы найдете подробное руководство как это реализовать.
Первоначальной идеей этого выпуска было обсуждение асиннхронности, подходов и решений со всех, так сказать, четырех сторон. Сначала обсудить нативные темы, а потом обсудить кроссплатформенные решения. И начиналось все вроде бы хорошо, обсудили многопоточность, классические проблемы, языки, которые живут без этого, но потом Данис с Кириллом так увлеклись беседой о сходствах и различиях асинхронных подходов в Android и iOS, что на Flutter и React Native просто тупо не хватило времени!
🤪 Так что придется делать два выпуска по цене одного! Асинхронность Flutter vs ReactNative ждите в следующем!
Последние 3 месяца сообщество Mobile People (и я в том числе) готовило для вас большое мероприятие - Mobile People Day в рамках RS Conf.
В рамках конференции вы можете услышать доклады по Android, iOS и Flutter. Вас ждут 14спикеров с докладами в горячих темах современной разработки:
👉Йонатан Левин@monday.com - Android GDE, основатель Android Academy 👉Александр Блинов@Headhunter - ведущий Android Dev Podcast 👉Elaine Dias Batista@SFEIR - Google Assistant GDE 👉Muhammed Salih Guler@Onefootball GmbH - Flutter GDE 👉Anastasiia Voitova@Cossack Labs - специалист по безопасности мобильных приложений 👉Дмитрий Мовчан@KasperskyLab - организатор Android Academy в Москве
Когда: 9 августа 2019 Формат: 1 день ➡️ 2 потока ➡️13 докладов Место: Культурный хаб OK16 (карта)
Больше спикеров и информации о них вы можете найти на сайте конференции
Dagger 2 - самый популярный DI на Android. Но не все так идеально, так как приходится писать слишком много boileplate кода для его работы. Как уменьшить количество этих строк в ваших исходниках? Воспользуйтесь основными рекомендациями: 1️⃣ Не используйте dagger-android 2️⃣ Используйте androix.fragment 1.1.0, в которой появились возможность делать inject зависимостей в конструктор Fragment с использованием FragmentFactory 3️⃣ Используйте inject в конструкторы вместо объявление зависимостей в модулях 4️⃣ Для предоставления зависимостей, тип которых является интерфейс используйте @Binds 5️⃣ Не используйте Dagger Component для получения зависимостей оттуда
Лично от себя рекомендую обратить внимание на простые библиотеки, разработанные в EPAM: 👉Assisted ViewModel - упрощение inject ViewModel 👉Dagger Generate Binds - упрощение объявление @Binds
Улучшения для разработчиков Gradle плагинов: 👉 Возможность выполнять inject системных сервисов (ObjectFactory, WorkerExecutor и пр.) в абстрактные поля 👉 Добавлены методы для создания domain object collection в ObjectFactory: domainObjectContainer() и domainObjectSet() 👉 Собственные типы, такие как Task, Plugin или Project, могут быть реализованы как абстрактные классы 👉 Больше документации по написанию собственных плагинов
Android - особенная ОС, поэтому ей даже сделали особенный формат сериализации данных - Parcelable. Конечно он быстрее, лучше и весь такой крутой по сравнению с Serializable, но проблема в одном - множество boilerplate кода, который надо писать, а все мы знаем, что разработчики ленивы 😁
Kotlin сделал нашу жизнь лучше и даже сделали специальное расширение, которое упрощает жизнь разработчикам под Android - Kotlin Android Extensions, в рамках которого есть функция, упрощающая реализацию Parcelable. Для этого вам необходимо добавить аннотацию @Parcelize к вашему классу.
Текущий тренд во всей разработке с UI - декларативные фреймворки. Jetpack Compose - решение этого вопросы для Android. Пока оно очень сырое и не готово к использованию в боевых приложениях, но уже можно посмотреть на то как мы будем писать UI через 1-2 года.
Room - очень удобная ORM для Android. Ее отличительные особенности: 👉 удобство использования 👉 интеграция с Architecture Components и другими популярными библиотеками 👉 отсутствие рефлексии
Но не все возможности поддерживаются этой библиотекой, например из коробки нет возможности построить отношение M : N 😦. В статье вы найдете рецепт как исправить отсутствие этой функции (я надеюсь что с будущими релизами ее исправят).