#ArchitectureComponents, #DataBinding #Coroutines
ViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines
👉 Поддержка сохранения состояния в
👉 Интеграция между Navigation библиотекой и
👉 Использование
👉 Поддержка Kotlin Coroutines в
ViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines
Architecture Components
, представленные в 2017 году, значительно повлияли на разработку Android приложений. ViewModel используется в более чем 40% процентов приложений. За счет такой большой популярности это компонент все активнее и развивается и обрастает новыми функциями:👉 Поддержка сохранения состояния в
ViewModel
👉 Интеграция между Navigation библиотекой и
ViewModel
👉 Использование
ViewModel
в DataBinding👉 Поддержка Kotlin Coroutines в
ViewModel
на основе viewModelScopeMedium
ViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines
Since its introduction, ViewModel has become one of the most “core” Android Jetpack libraries. Based on our 2019 Developer Benchmarking…
#SQLite #Coroutines #Room #ArchitectureComponents
Threading models in Coroutines and Android SQLite API
В Room 2.1.0 появилась поддержка Coroutine, но особенность их работы в том, что они не гарантируют выполнение всей Coroutine в одном Java потоке. И тут получается проблема - SQLite требует выполнение транзакций в одном и том же потоке.
Как эту проблему решили разработчики Room? Для этого была создана специальная функции withTransaction, которая позволяет выполнять транзакции в БД с помощью Room на основе Coroutine.
В статье вы найдете подробности реализации транзакций SQLite при использовании Coroutine и как можно использовать CoroutineContext.
Threading models in Coroutines and Android SQLite API
В Room 2.1.0 появилась поддержка Coroutine, но особенность их работы в том, что они не гарантируют выполнение всей Coroutine в одном Java потоке. И тут получается проблема - SQLite требует выполнение транзакций в одном и том же потоке.
Как эту проблему решили разработчики Room? Для этого была создана специальная функции withTransaction, которая позволяет выполнять транзакции в БД с помощью Room на основе Coroutine.
В статье вы найдете подробности реализации транзакций SQLite при использовании Coroutine и как можно использовать CoroutineContext.
Medium
Threading models in Coroutines and Android SQLite API
Implementing suspending transactions in Room
#Architecture #Modularization #ArchitectureComponents
Modularization by Feature and Layer with Android Architecture Components
Команда Android в последние 2 года активно стала решать трудности, связанные с разработкой эффективной архитектуры для Android приложений. Результат этого - Android Architecture Components.
Трендом текущей Android разработки является модуляризация. Она дает плюсы в архитектуре, более высокую скорость сборки проектов и возможность использовать Dynamic Features.
Как позволяет это реализовать текущий стек Architecture Components вы найдете в статье
Modularization by Feature and Layer with Android Architecture Components
Команда Android в последние 2 года активно стала решать трудности, связанные с разработкой эффективной архитектуры для Android приложений. Результат этого - Android Architecture Components.
Трендом текущей Android разработки является модуляризация. Она дает плюсы в архитектуре, более высокую скорость сборки проектов и возможность использовать Dynamic Features.
Как позволяет это реализовать текущий стек Architecture Components вы найдете в статье
Medium
Modularization by Feature and Layer with Android Architecture Components
Hello! In this story I want to have a quick look at modular android development in conjunction with android architecture components.
#MVVM #AppArchitecture #ArchitectureComponents
Android MVVM — Do’s and Don’ts
Несколько рекомендаций при реализации архитектуры MVVM на основе Architecture Components:
👉
👉 View не должна содержать какой либо логики (быть пассивной). Место для всей логики - это
👉 ViewModel не должна иметь ссылки на View
👉 Если вы хотите получать обновления данных от
Android MVVM — Do’s and Don’ts
Несколько рекомендаций при реализации архитектуры MVVM на основе Architecture Components:
👉
ViewModel
не должна использовать классы из Android SDK. Используйте интерфейсы, которые позволят вам абстрагироваться от платформенной реализации.👉 View не должна содержать какой либо логики (быть пассивной). Место для всей логики - это
ViewModel
.👉 ViewModel не должна иметь ссылки на View
👉 Если вы хотите получать обновления данных от
LiveData
для обновления UI, тогда используйте viewLifecycleOwner.Medium
MVVM Do’s and Don’ts
Some ground rules to follow while using MVVM Architecture.
#Architecture #ArchitectureComponents #AndroidX #MVVM
С появлением Architecture Components в Android реализация MVVM на основе этих компонентов стала очень популярна. Я и сам выбираю такое решение в связи с тем, что она имеет множество позитивных моментов:
👉 Решение популярных задач в архитектуре Android приложений
👉 Хорошая документация: статьи, видео, примеры и Codelab-ы
👉 Интеграция с инструментарием для разработки
👉 Поддержка от Google
👉 Большинство разработчиков знают как ее реализовывать и это способ единообразен из-за одного источника правды (Google). Это уменьшает время на обучение стажеров и интеграцию новых людей + между проектами становится общий стандарт
👉 Интеграция между различными библиотеками из Architecture Component так и сторонними (RxJava, Kotlin Coroutines)
Я не считаю ее идеалом, но Arch Components значительно упрощают создание приложений на Android и дает взгляд на архитектуру приложений от создателя Android SDK.
С появлением Architecture Components в Android реализация MVVM на основе этих компонентов стала очень популярна. Я и сам выбираю такое решение в связи с тем, что она имеет множество позитивных моментов:
👉 Решение популярных задач в архитектуре Android приложений
👉 Хорошая документация: статьи, видео, примеры и Codelab-ы
👉 Интеграция с инструментарием для разработки
👉 Поддержка от Google
👉 Большинство разработчиков знают как ее реализовывать и это способ единообразен из-за одного источника правды (Google). Это уменьшает время на обучение стажеров и интеграцию новых людей + между проектами становится общий стандарт
👉 Интеграция между различными библиотеками из Architecture Component так и сторонними (RxJava, Kotlin Coroutines)
Я не считаю ее идеалом, но Arch Components значительно упрощают создание приложений на Android и дает взгляд на архитектуру приложений от создателя Android SDK.
#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…
#SQLite #ArchitectureComponents #Room
Packing the Room: Pre-populate your database with this one method
Сейчас в разработке находится следующая версия (2.2) популярного ORM решения для Android - Room. В этой версии появляется функция предзаполнения, которая позволяет вам заполнить БД контентом из файла.
Это позволит избегать парсинга данных из файлов для заполнения данными и ускорить старт приложения.
Packing the Room: Pre-populate your database with this one method
Сейчас в разработке находится следующая версия (2.2) популярного ORM решения для Android - Room. В этой версии появляется функция предзаполнения, которая позволяет вам заполнить БД контентом из файла.
Это позволит избегать парсинга данных из файлов для заполнения данными и ускорить старт приложения.
Medium
Packing the Room: pre-populate your database with this one method
Let’s say that you want to pre-populate your database with data either packaged in your APK or downloaded from server. Whether you wanted…
#ArchitectureComponents
Android ProcessLifecycleOwner by example
Очень часто приходится сталкиваться с задачей по определению, когда приложение скрывается с экрана. Android Arсhitecture Components имеют ProcessLifecycleOwner. В статье рассматриваются подробности его работы и как его использовать
Android ProcessLifecycleOwner by example
Очень часто приходится сталкиваться с задачей по определению, когда приложение скрывается с экрана. Android Arсhitecture Components имеют ProcessLifecycleOwner. В статье рассматриваются подробности его работы и как его использовать
Medium
Android ProcessLifecycleOwner by example
The ProcessLifecycleOwner is an extension for getting information about lifecycle for the whole application process. Let’s explore it.
#ArchitectureComponents #LiveData
Unit-testing LiveData and other common observability problems
Важно помнить, что
В статье рассматриваются ошибки и рекомендации по использованию
👉 Используйте
👉 Используйте InstantTaskExecutorRule для предотвращения проблем с многопоточностью при работе с
👉 Частая ошибка - используйте один и тот же объект
Unit-testing LiveData and other common observability problems
Важно помнить, что
LiveData
посылает обновления, только в том случае, когда у нее есть хотя бы один подписчик (observer). Это может привести к ошибкам в ваших тестах (успешно их прохождению или нет).В статье рассматриваются ошибки и рекомендации по использованию
LiveData
в тестах:👉 Используйте
LiveData.getOrAwaitValue(timeout: Long)
для получения результата из LiveData
в unit тестах👉 Используйте InstantTaskExecutorRule для предотвращения проблем с многопоточностью при работе с
LiveData
👉 Частая ошибка - используйте один и тот же объект
ViewModel
, если он шарится между несколькими Fragment
Medium
Unit-testing LiveData and other common observability problems
Next time you’re scratching your head looking at a perfectly fine unit test with LiveDatas that should be passing, or at an empty screen…
#ArchitectureComponents #LiveData #Location
Android Tutorial On Location Update With LiveData
Гайд по интеграции Fused Location Provider и
Android Tutorial On Location Update With LiveData
Гайд по интеграции Fused Location Provider и
LiveData
, чтобы получать обновления геопозиции красиво с использованием Architecture ComponentsMedium
Android Tutorial On Location Update With LiveData
In this tutorial, I will introduce you to how to implement continuous location update with Android architecture components and Google…
#WorkManager #ArchitectureComponents
Workout your tasks with WorkManager — Advanced Topics
Продолжение серии статей о работе с WorkManager. В текущей рассматривается:
1️⃣ Как идентифицировать Task
2️⃣ Как получить статус Task
3️⃣ Политики по повторению выполнения Task (backoff)
4️⃣ Зависимости выполнения Task между собой
5️⃣ Как работать с входными и выходными данными
6️⃣ Как можно управлять многопоточностью в WorkManager
Workout your tasks with WorkManager — Advanced Topics
Продолжение серии статей о работе с WorkManager. В текущей рассматривается:
1️⃣ Как идентифицировать Task
2️⃣ Как получить статус Task
3️⃣ Политики по повторению выполнения Task (backoff)
4️⃣ Зависимости выполнения Task между собой
5️⃣ Как работать с входными и выходными данными
6️⃣ Как можно управлять многопоточностью в WorkManager
Medium
Workout your tasks with WorkManager — Advanced Topics
Advanced topics like getting the status of the work, BackoffPolicy, chaining work and Threading options.
#ArchitectureComponents #Navigation #DynamicFeature
Navigation with Dynamic Feature Modules
Android Architecture Components - набор библиотек, который решил много проблем Android разработчиков и дал множество простых решений, одним из который является Navigation, который упрощает переходы между экранами в Android приложениях.
В свою очередь Google до сих пор не представила стабильного решения (пока есть только SNAPSHOT сборки) для навигации по приложению, когда вы используете Dynamic Delivery.
В статье описывается способ как с помощью Deep Link и Activity медиатора для обработки все таких ссылок достигается зен Navigation + Dynamic Delivery.
Navigation with Dynamic Feature Modules
Android Architecture Components - набор библиотек, который решил много проблем Android разработчиков и дал множество простых решений, одним из который является Navigation, который упрощает переходы между экранами в Android приложениях.
В свою очередь Google до сих пор не представила стабильного решения (пока есть только SNAPSHOT сборки) для навигации по приложению, когда вы используете Dynamic Delivery.
В статье описывается способ как с помощью Deep Link и Activity медиатора для обработки все таких ссылок достигается зен Navigation + Dynamic Delivery.
Medium
Navigation with Dynamic Feature Modules
Recently at work, my team started taking on the challenge of modularising our app, one of the first things we started grappling with…
#Navigation #ArchitectureComponents #CustomTab
Add Chrome Custom Tabs to the Android Navigation Component
Architecture Components предоставило нам множество возможностей и библиотек, которые решили сложности работы с Android SDK. Одним из таких решений стало Navigation. Она позволяет вам эффективно описывать граф навигации, открывая
Как можно расширить и добавить новые типы Destination в графе? Библиотека также позволяет сделать и в статье вы найдете рецепт как сделать это.
Основы рецепта:
1️⃣ Создание собственного Destination
2️⃣ Создание собственного Navigator
3️⃣ Объявление кастомных атрибутов в XML (опционально)
4️⃣ Добавить поддержку нового
Add Chrome Custom Tabs to the Android Navigation Component
Architecture Components предоставило нам множество возможностей и библиотек, которые решили сложности работы с Android SDK. Одним из таких решений стало Navigation. Она позволяет вам эффективно описывать граф навигации, открывая
Fragment
, Activity
, DialogFragment
и deep link.Как можно расширить и добавить новые типы Destination в графе? Библиотека также позволяет сделать и в статье вы найдете рецепт как сделать это.
Основы рецепта:
1️⃣ Создание собственного Destination
2️⃣ Создание собственного Navigator
3️⃣ Объявление кастомных атрибутов в XML (опционально)
4️⃣ Добавить поддержку нового
Navigator
в Navigation Host
Medium
Add Chrome Custom Tabs to the Android Navigation Component
Extending Jetpack’s ability to navigate anywhere
#ArchitectureComponents #Architecture #Modularization
Android Components Architecture in a Modular Word
Хорошая статья в которой происходит разбор модуляризации Android приложения:
👉 Принципы осуществления модуляризации
👉 Модули и их роли
👉 Множество других полезный статей и примеров
👉 Проблемы со сторонними библиотеками
👉 Собственный пример
Android Components Architecture in a Modular Word
Хорошая статья в которой происходит разбор модуляризации Android приложения:
👉 Принципы осуществления модуляризации
👉 Модули и их роли
👉 Множество других полезный статей и примеров
👉 Проблемы со сторонними библиотеками
👉 Собственный пример
Medium
📚 Android Components Architecture in a Modular Word
Over years Android architecture evolved to support production-quality apps on any scale focused on helping developers to design robust…
#Codelab #Coroutines #ArchitectureComponents
Advanced Coroutines with Kotlin Flow and LiveData
Продолжительность: 57 минут
В библиотеках ViewMode, Lifecycle и LiveData 2.2.0 было добавлена расширенная поддержка Kotlin Coroutines:
👉 Специальный билдер
👉 Конвертация
👉 Поддержка запуска
В новой Codelab вы можете найти практическое занятие, которое поможет усвоить вам все аспекты нового функционала, а также расскажет о
Почему стоит обратить внимание на
1️⃣ Это полностью нативный для Kotlin способ для работы с реактивными потоками данных
2️⃣ Он проще чем RxJava. Написать свой оператор намного проще
3️⃣ Flow быстрее RxJava и других существующих реализации Rx на Java/Kotlin (тесты есть в репозитории kotlinx.coroutines)
Advanced Coroutines with Kotlin Flow and LiveData
Продолжительность: 57 минут
В библиотеках ViewMode, Lifecycle и LiveData 2.2.0 было добавлена расширенная поддержка Kotlin Coroutines:
👉 Специальный билдер
liveData {}
, который внутри может выполнять suspend функции👉 Конвертация
Flow
<-> LiveData
👉 Поддержка запуска
Coroutine
с Lifecycle
и соответсвующие CoroutineScope
в Fragment
и Activity
В новой Codelab вы можете найти практическое занятие, которое поможет усвоить вам все аспекты нового функционала, а также расскажет о
Flow
, принципах работы с ними и его интеграции в ваши Android приложения для решения распространённых задач.Почему стоит обратить внимание на
Flow
?1️⃣ Это полностью нативный для Kotlin способ для работы с реактивными потоками данных
2️⃣ Он проще чем RxJava. Написать свой оператор намного проще
3️⃣ Flow быстрее RxJava и других существующих реализации Rx на Java/Kotlin (тесты есть в репозитории kotlinx.coroutines)
Google Codelabs
Learn advanced coroutines with Kotlin Flow and LiveData
In this codelab, you’ll build a coroutine-based Android app that uses Architecture Components to fetch data from the network and a Room database.
#Jetpack #ArchitectureComponents #Lifecycle
Optimizing Android ViewModel with Lifecycle 2.2.0
Обзор последних возможностей библиотек Lifecycle (LiveData, ViewMode, Lifecycle), ktx расширений и лучших практик:
👉 Делегаты ViewModel
👉 Почему не стоит использовать AndroidViewModel
👉 Какие данные не стоит передавать в ViewModel
👉 Сохранение данных ViewModel
Optimizing Android ViewModel with Lifecycle 2.2.0
Обзор последних возможностей библиотек Lifecycle (LiveData, ViewMode, Lifecycle), ktx расширений и лучших практик:
👉 Делегаты ViewModel
👉 Почему не стоит использовать AndroidViewModel
👉 Какие данные не стоит передавать в ViewModel
👉 Сохранение данных ViewModel
Medium
Optimizing Android ViewModel with Lifecycle 2.2.0
Initialization, passing arguments, and saved state
#DependencyInjection #ArchitectureComponents #ViewModel
Injecting ViewModel — hard to easy
В современной Android разработке очень популярна архитектура MVVM на основе Arch Components. И куда же современное приложение без Dependency Injection (DI).
Создание ViewModel и доставка зависимостей в ее конструктор с помощью DI - нетривиальная задача, так как создать ViewModel просто через конструктор неправильно, нужно делать это через ViewModelProvider.Factory.
В статье разбирается как решить эту задачу с помощью Dagger и Koin.
Injecting ViewModel — hard to easy
В современной Android разработке очень популярна архитектура MVVM на основе Arch Components. И куда же современное приложение без Dependency Injection (DI).
Создание ViewModel и доставка зависимостей в ее конструктор с помощью DI - нетривиальная задача, так как создать ViewModel просто через конструктор неправильно, нужно делать это через ViewModelProvider.Factory.
В статье разбирается как решить эту задачу с помощью Dagger и Koin.
Medium
Injecting ViewModel — hard to easy
Comparing Dagger 2, Koin and Service Locator approaches
#LiveData #Coroutines #ArchitectureComponents
No more LiveData in Your Repository: There are better options
Google предложила в своей стандартной архитектуре использовать LiveData для получения данных из Repository. Это позволяет получать последние обновления.
Но так ли LiveData подходит для выполнения этой задачи? Либо лучше взять Coroutine Flow или Rx Observable для этого? Мой совет: "Да"! - LiveData больше про UI.
No more LiveData in Your Repository: There are better options
Google предложила в своей стандартной архитектуре использовать LiveData для получения данных из Repository. Это позволяет получать последние обновления.
Но так ли LiveData подходит для выполнения этой задачи? Либо лучше взять Coroutine Flow или Rx Observable для этого? Мой совет: "Да"! - LiveData больше про UI.
Medium
No more LiveData in Your Repository: There are better options.
Three years ago at a Google I/O that every Android developer remembers, Google announced Android Architecture Components and we were all…
#ArchitectureComponents #ViewModel
Should I use Jetpack ViewModel?
Архитектура MVVM на основе Jetpack на сегодня довольно популярна в Android разработке. Вы задумывались так ли много проблем решает ViewModel из Jetpack?
Автор в своей статье приводит доводы, которые заставят вас задуматься так ли все просто и помогут найти проблемы
Should I use Jetpack ViewModel?
Архитектура MVVM на основе Jetpack на сегодня довольно популярна в Android разработке. Вы задумывались так ли много проблем решает ViewModel из Jetpack?
Автор в своей статье приводит доводы, которые заставят вас задуматься так ли все просто и помогут найти проблемы
Glureau
Should I use Jetpack ViewModel? - Grégory Lureau
Adding a new library to a production project should always be done with extra care.
#ArchitectureComponents #Navigation
What’s New in Navigation 2020
Navigation Arch Component в первой своей версии много чего не умел, чего не хватало разработчикам. За последнее время все это наверстали:
👉 Доступ к NavBackStackEntry: расширение навигации за рамки NavDestination
👉 Шаринг данных между элементами NavGraph с помощью NavBackStackEntry, которая является ViewModelProvider
👉 Поддержка Activity Result
👉 Поддержка Dynamic Features
👉 Тестирование навигации
👉 Получение параметров из Deep Link
👉 Kotlin DSL для описания графа
👉 Улучшения API
В статье найдете более подробный обзор этих возможностей
What’s New in Navigation 2020
Navigation Arch Component в первой своей версии много чего не умел, чего не хватало разработчикам. За последнее время все это наверстали:
👉 Доступ к NavBackStackEntry: расширение навигации за рамки NavDestination
👉 Шаринг данных между элементами NavGraph с помощью NavBackStackEntry, которая является ViewModelProvider
👉 Поддержка Activity Result
👉 Поддержка Dynamic Features
👉 Тестирование навигации
👉 Получение параметров из Deep Link
👉 Kotlin DSL для описания графа
👉 Улучшения API
В статье найдете более подробный обзор этих возможностей
Android Developers Blog
What’s New in Navigation 2020
News and insights on the Android platform, developer tools, and events.