#AndroidQ #ScopedStorage #BestPractices
Android Q Scoped Storage: Best Practices and Updates
Следующей релиз Android (Q), направлен на улучшение безопасности пользователей. Частью этих улучшения стали новые ограничения на работу с файлами - Scoped Storage.
Изменения направлены на ограничение работы с файлами, созданными другими приложения и обеспечением механизма для пользователя, позволяющим контролировать возможности по доступу к файлам приложениями.
Для всех тех Android приложения, кто всегда был хорошим и жил по рекомендуемым правилам для работы с файлами, эффекта новых изменений не будет вовсе, либо он будет минимальным.
Для остальных - придется вносить правки в свою работу с файлами, но разработчики Android ОС предоставляют рекомендации, который вы можете найти в статье.
Android Q Scoped Storage: Best Practices and Updates
Следующей релиз Android (Q), направлен на улучшение безопасности пользователей. Частью этих улучшения стали новые ограничения на работу с файлами - Scoped Storage.
Изменения направлены на ограничение работы с файлами, созданными другими приложения и обеспечением механизма для пользователя, позволяющим контролировать возможности по доступу к файлам приложениями.
Для всех тех Android приложения, кто всегда был хорошим и жил по рекомендуемым правилам для работы с файлами, эффекта новых изменений не будет вовсе, либо он будет минимальным.
Для остальных - придется вносить правки в свою работу с файлами, но разработчики Android ОС предоставляют рекомендации, который вы можете найти в статье.
Android Developers Blog
Android Q Scoped Storage: Best Practices and Updates
Application Sandboxing is a core part of Android’s design, isolating apps from each other. In Android Q, taking the same fundamental principle from Application Sandboxing, we introduced Scoped Storage.
👍1
#Kotlin #BestPractices
Советы по разработке Kotlin библиотек под Android/Java
В статье рассматриваются:
👉 Следите за совместимость версий Kotlin stdlib
👉 Какую stdlib использовать?
👉 Структура пакетов
👉 Выбору модификаторов видимости
👉 Совместимость с Java
👉 Kotlin зависимость в Java проектах
Советы по разработке Kotlin библиотек под Android/Java
В статье рассматриваются:
👉 Следите за совместимость версий Kotlin stdlib
👉 Какую stdlib использовать?
👉 Структура пакетов
👉 Выбору модификаторов видимости
👉 Совместимость с Java
👉 Kotlin зависимость в Java проектах
👍1
#Coroutines #BestPractices
Coroutining Android Apps
В своем докладе я рассказал множестве советов, как использовать корутины с максимальной пользой, получив простой код.
Слайды к докладу
Coroutining Android Apps
Kotlin Coroutines
- хайповый подход для реализации асинхронных задач, особенно если проект строится на Kotlin. Но любой новый подход надо стараться использовать правильно, чтобы получить максимальную пользу. В своем докладе я рассказал множестве советов, как использовать корутины с максимальной пользой, получив простой код.
Слайды к докладу
YouTube
Кирилл Розов — Coroutining Android apps
Ближайшая конференция — Mobius 2024 Autumn, 11 октября (Online), 19–20 октября, Санкт-Петербург. Подробности и билеты: https://jrg.su/Yu6KNJ
— —
. . .
. Всегда интересно послушать практический доклад о какой-либо технологии, который в отличие от документации…
— —
. . .
. Всегда интересно послушать практический доклад о какой-либо технологии, который в отличие от документации…
#ArchitectureComponents #BestPractices
Распространенные ошибки при использовании Android Architecture Components
Повторение - мать учения. Поэтому рекомендую освежить или наоборот ознакомиться с рекомендациями по использованию Architecture Components:
1️⃣ Утечка
2️⃣ Повторная загрузка данных после смены конфигурации
3️⃣ Утечка ViewModel
4️⃣ Позволять
5️⃣ Создание зависимостей ViewModel после каждого изменения конфигурации
6️⃣ Хранение ссылки на
Распространенные ошибки при использовании Android Architecture Components
Повторение - мать учения. Поэтому рекомендую освежить или наоборот ознакомиться с рекомендациями по использованию Architecture Components:
1️⃣ Утечка
LiveData
Observer в Fragment
2️⃣ Повторная загрузка данных после смены конфигурации
3️⃣ Утечка ViewModel
4️⃣ Позволять
View
изменять LiveData
5️⃣ Создание зависимостей ViewModel после каждого изменения конфигурации
6️⃣ Хранение ссылки на
View
в ViewModelХабр
5 распространенных ошибок при использовании архитектурных компонентов Android
Даже если вы не делаете этих ошибок, стоит о них помнить, чтобы не столкнуться с некоторыми проблемами в будущем. 1. Утечка наблюдателей LiveData во фрагментах...
#BestPractices
The technical choices I make to build great Android apps
Важным началом разработки любого приложения это есть принятия подходов, которые будут использоваться при создание вашего единорога! Разработчики приложения "A-Z" делятся своим опытом:
1️⃣ UI
2️⃣ Качество кода
3️⃣ Архитектура приложения
The technical choices I make to build great Android apps
Важным началом разработки любого приложения это есть принятия подходов, которые будут использоваться при создание вашего единорога! Разработчики приложения "A-Z" делятся своим опытом:
1️⃣ UI
2️⃣ Качество кода
3️⃣ Архитектура приложения
#Exception #BestPractices
Handling Exceptions: The Easy Way
Ошибки естественным образом возникают в программах. Их причинами могут быть как неправильный код так и внешние факторы. Поэтому разработчики всегда должны писать код с учетом этих факторов.
Как понять какие ошибки стоит обрабатывать, выбрасывать, игнорировать, а возможно вообще не задумываться о их обработке? Нормальная ли практика игнорировать все ошибки, чтобы приложение не падало у пользователя?
Handling Exceptions: The Easy Way
Ошибки естественным образом возникают в программах. Их причинами могут быть как неправильный код так и внешние факторы. Поэтому разработчики всегда должны писать код с учетом этих факторов.
Как понять какие ошибки стоит обрабатывать, выбрасывать, игнорировать, а возможно вообще не задумываться о их обработке? Нормальная ли практика игнорировать все ошибки, чтобы приложение не падало у пользователя?
Medium
Handling Exceptions. The Easy Way.
A simple framework for dealing with in languages like Java, Kotlin & similar.
#Exception #BestPractices
Рекомендуемая стратегия для обработки ошибок:
1️⃣ Избегайте возникновения ошибки, например проверяйте данные перед передачей в метод или проверяйте текущие состояние перед получением данных (например получение
2️⃣ Если вы знаете как обработать возникшую проблему - делайте это: отправьте запрос повторно, вызывайте другой метод и пр.
3️⃣ Пробрасывайте исключение дальше, добавляя больше информации о его причине. Более высокий слой вполне может быть способен обработать ошибку
4️⃣ Crash приложения. Возможно кто-то считает что это плохо, но он позволяет мгновенно отловить ошибку на стадии тестирования, либо легко отследить ее в проде. Если ошибка просто игнорируются и приложение не падает, то понять причину последующей некорректной работы может быть намного труднее чем увидеть stack trace и разобраться в нем.
Не забудьте настроить Firebase Crashlytics или другой сервис по отслеживанию крэшей!
Уведомляйте пользователя об ошибках, которые не дают приложению нормально работать. Пользователь должен понимать, что есть причина некорректной работы.
Также будет хорошо показать путь которым эту ошибку можно исправить, например предоставив соответствующее разрешение или доступ.
Рекомендуемая стратегия для обработки ошибок:
1️⃣ Избегайте возникновения ошибки, например проверяйте данные перед передачей в метод или проверяйте текущие состояние перед получением данных (например получение
Activity
/Context
в Fragment
)2️⃣ Если вы знаете как обработать возникшую проблему - делайте это: отправьте запрос повторно, вызывайте другой метод и пр.
3️⃣ Пробрасывайте исключение дальше, добавляя больше информации о его причине. Более высокий слой вполне может быть способен обработать ошибку
4️⃣ Crash приложения. Возможно кто-то считает что это плохо, но он позволяет мгновенно отловить ошибку на стадии тестирования, либо легко отследить ее в проде. Если ошибка просто игнорируются и приложение не падает, то понять причину последующей некорректной работы может быть намного труднее чем увидеть stack trace и разобраться в нем.
Не забудьте настроить Firebase Crashlytics или другой сервис по отслеживанию крэшей!
Уведомляйте пользователя об ошибках, которые не дают приложению нормально работать. Пользователь должен понимать, что есть причина некорректной работы.
Также будет хорошо показать путь которым эту ошибку можно исправить, например предоставив соответствующее разрешение или доступ.
Firebase
Firebase Crashlytics
Get clear, actionable insight into app issues with this powerful crash reporting solution for Apple, Android, Flutter, and Unity.
#Kotlin #Dagger #BestPractices #DependencyInjection
Dagger in Kotlin: Gotchas and Optimizations
Dagger на сегодня является самым популярным DI для Android. Почему так? Он богат возможностями, не использует рефлексию и проверят ваш граф во время компиляции.
Для всех любителей Kotlin использование Dagger порой является неудобным и трудным в силу того, что эта библиотека изначально разрабатывалась для Java и до сих пор на официальном сайте нет полноценного руководства как ее лучше использовать с Kotlin.
Команда Android решила исправит это и дать ряд рекомендаций:
👉 Всегда используйте последнюю версию Dagger (сейчас это 2.24)
👉 Включите инкрементальную компиляцию Dagger в kapt
👉 При выполнение inject зависимости в непубличное свойство класса, задавайте квалификатор на поле
👉 Dagger работает эффективнее если зависимости в
👉 Работа с generic в Kotlin и Java отличается, поэтому при inject зависимостей с generic вам будет полезна аннотация @JvmSuppressWildcards
👉 Будьте осторожны с использованием single line function, так как Dagger при построение графа опирается на возвращаемый тип. Указывайте явно возвращаемый тип всегда или используйте функции с телом.
Dagger in Kotlin: Gotchas and Optimizations
Dagger на сегодня является самым популярным DI для Android. Почему так? Он богат возможностями, не использует рефлексию и проверят ваш граф во время компиляции.
Для всех любителей Kotlin использование Dagger порой является неудобным и трудным в силу того, что эта библиотека изначально разрабатывалась для Java и до сих пор на официальном сайте нет полноценного руководства как ее лучше использовать с Kotlin.
Команда Android решила исправит это и дать ряд рекомендаций:
👉 Всегда используйте последнюю версию Dagger (сейчас это 2.24)
👉 Включите инкрементальную компиляцию Dagger в kapt
👉 При выполнение inject зависимости в непубличное свойство класса, задавайте квалификатор на поле
👉 Dagger работает эффективнее если зависимости в
@Module
предоставляются через статические методы. Используйте object
для объявления @Module
и добавляйте аннотацию @JvmStatic
к каждому методу @Provides
.👉 Работа с generic в Kotlin и Java отличается, поэтому при inject зависимостей с generic вам будет полезна аннотация @JvmSuppressWildcards
👉 Будьте осторожны с использованием single line function, так как Dagger при построение графа опирается на возвращаемый тип. Указывайте явно возвращаемый тип всегда или используйте функции с телом.
Medium
Dagger in Kotlin: Gotchas and Optimizations
Use Dagger in Kotlin! This article includes best practices to optimize your build time and gotchas you might encounter.
#Style #DarkTheme #Material #BestPractices
Темы и стили в Android-приложениях
Возможности кастомизации View на основе ресурсов style и атрибутов довольно обширны. В статье вы найдете подробный разбор:
👉 Отличия между темой, стилей, ThemeOverlay
👉 Что такое атрибут
👉 Как работает механизм кастомизации View на основе стилей
👉 Реализация Material Design 2.0 (Material Components)
👉 Как правильно работать со стилями, чтобы поддержать темную тему
👉 Советы по работе со стилями
Темы и стили в Android-приложениях
Возможности кастомизации View на основе ресурсов style и атрибутов довольно обширны. В статье вы найдете подробный разбор:
👉 Отличия между темой, стилей, ThemeOverlay
👉 Что такое атрибут
👉 Как работает механизм кастомизации View на основе стилей
👉 Реализация Material Design 2.0 (Material Components)
👉 Как правильно работать со стилями, чтобы поддержать темную тему
👉 Советы по работе со стилями
Хабр
Темы и стили в Android-приложениях
Каждому Android-разработчику так или иначе приходилось работать со стилями. Кто-то чувствует себя с ними уверенно, у кого-то есть только поверхностные знания, к...
#ArchitectureComponents #ViewModel #BestPractices
When to load data in ViewModels
Советы по загрузке данных в ViewModel:
⛔Вызывать метод для загрузки данных
⛔Запускать загрузку при создании
✅Запускать загрузку данных отложено (lazy)
✅Загружать данные в
✅Передавайте все необходимые данные в
When to load data in ViewModels
Советы по загрузке данных в ViewModel:
⛔Вызывать метод для загрузки данных
⛔Запускать загрузку при создании
ViewModel
✅Запускать загрузку данных отложено (lazy)
✅Загружать данные в
LiveData
, когда происходит вызов onActive()
✅Передавайте все необходимые данные в
ViewModel
через конструктор, а не функции или свойстваMedium
When to load data in ViewModels
Recently I had a surprisingly long discussion on an ostensibly easy question. Where in our code should we actually trigger the loading of…
#BestPractices
10 Tips for Android Library Developers
Вы разрабатываете Android библиотеку? Думаете начать? Если да - то вам могут полезны советы, приведенные в статье, которые упростят работу конечным пользователям вашего творения.
10 Tips for Android Library Developers
Вы разрабатываете Android библиотеку? Думаете начать? Если да - то вам могут полезны советы, приведенные в статье, которые упростят работу конечным пользователям вашего творения.
Medium
10 Tips for Android Library Developers
If you’re distributing a library or just maintaining some library modules in your project, here’re some tips that may be useful to you.
#Architecture #BestPractices
The “Real” Repository Pattern in Android
Repository - это довольно популярный шаблон проектирования, позволяющий инкапсулировать получение/хранение данных из различных источников: сервер, БД, хранилища на устройстве и пр.
Шаблон проектирования - это рекомендация и общее описание компонентов и их отношений между ними, поэтому зачастую разработчики делают реализацию по разному и не всегда хорошо.
Наиболее популярные ошибки, которые допускают пользователи:
👉
👉 Различные несвязанные между собой DataSource используются одни и те же DTO
👉 Repository реализуется по на основе endpoint-ов, а не на основе модели
👉 Repository кэширует всю модель, даже те поля, которые всегда должны быть свежими
👉 DataSource используется более чем одним Repository
В статье разбираются эти лучшие практики по реализации и почему им стоит следовать
The “Real” Repository Pattern in Android
Repository - это довольно популярный шаблон проектирования, позволяющий инкапсулировать получение/хранение данных из различных источников: сервер, БД, хранилища на устройстве и пр.
Шаблон проектирования - это рекомендация и общее описание компонентов и их отношений между ними, поэтому зачастую разработчики делают реализацию по разному и не всегда хорошо.
Наиболее популярные ошибки, которые допускают пользователи:
👉
Repository
возвращает DTO (модели источников данных, которые используются источниками данных в нем) а не модели Domain слоя👉 Различные несвязанные между собой DataSource используются одни и те же DTO
👉 Repository реализуется по на основе endpoint-ов, а не на основе модели
👉 Repository кэширует всю модель, даже те поля, которые всегда должны быть свежими
👉 DataSource используется более чем одним Repository
В статье разбираются эти лучшие практики по реализации и почему им стоит следовать
Medium
The “Real” Repository Pattern in Android
Over the years I’ve seen many implementations of the repository pattern, yet I think most of them are wrong and not beneficial.