#Dagger #ArchitectureComponents #ViewModel
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
Пример использования:
Assisted ViewModel
Как много усилий вы тратите на то чтобы написать
ViewModelProvider.Factory для ViewModel из Architecture Components? Процесс не самый удобный, особенно когда в конструктор вы передаете только зависимости из графа . Dagger?Я с коллегами решили написать библиотеку, которая избавит нас от этой тягомотины и поможет убрать необходимость реализации
ViewModelProvider.Factory.Пример использования:
class SampleViewModel @AssistedViewModel constructor( repository:Repository): ViewModelclass SampleFragment: Fragment { private lateinit var viewModel: SampleViewModel @Inject // AssistedViewModelFactory is generated fun init(factory: AssistedViewModelFactory) { viewModel = ViewModelProviders.of(this, factory) .get(SampleViewModel::class.java) }}#Room #SQLite #ArchitectureComponents
Вышел Room 2.1.0
Вышла новая версия Room в которой появились следующие возможности:
👉 Поддержка FTS
👉 Поддержка AutoValue
👉 Улучшена поддержка RxJava
👉 Поддержка Kotlin Coroutines (пока только suspend функции, ждем поддержки Channel и Flow)
👉 SQL view на основе аннотации @DatabaseView
👉 Исправление багов
Вышел Room 2.1.0
Вышла новая версия Room в которой появились следующие возможности:
👉 Поддержка FTS
👉 Поддержка AutoValue
👉 Улучшена поддержка RxJava
👉 Поддержка Kotlin Coroutines (пока только suspend функции, ждем поддержки Channel и Flow)
👉 SQL view на основе аннотации @DatabaseView
👉 Исправление багов
#ArchitectureComponents #BestPractices
Распространенные ошибки при использовании Android Architecture Components
Повторение - мать учения. Поэтому рекомендую освежить или наоборот ознакомиться с рекомендациями по использованию Architecture Components:
1️⃣ Утечка
2️⃣ Повторная загрузка данных после смены конфигурации
3️⃣ Утечка ViewModel
4️⃣ Позволять
5️⃣ Создание зависимостей ViewModel после каждого изменения конфигурации
6️⃣ Хранение ссылки на
Распространенные ошибки при использовании Android Architecture Components
Повторение - мать учения. Поэтому рекомендую освежить или наоборот ознакомиться с рекомендациями по использованию Architecture Components:
1️⃣ Утечка
LiveData Observer в Fragment2️⃣ Повторная загрузка данных после смены конфигурации
3️⃣ Утечка ViewModel
4️⃣ Позволять
View изменять LiveData5️⃣ Создание зависимостей ViewModel после каждого изменения конфигурации
6️⃣ Хранение ссылки на
View в ViewModelХабр
5 распространенных ошибок при использовании архитектурных компонентов Android
Даже если вы не делаете этих ошибок, стоит о них помнить, чтобы не столкнуться с некоторыми проблемами в будущем. 1. Утечка наблюдателей LiveData во фрагментах...
#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, если он шарится между несколькими FragmentMedium
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 HostMedium
Add Chrome Custom Tabs to the Android Jetpack 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.