Android Broadcast
14.1K subscribers
3.37K photos
273 videos
11 files
5.66K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#DependencyInjection #ArchitectureComponents #ViewModel

Injecting ViewModel — hard to easy

В современной Android разработке очень популярна архитектура MVVM на основе Arch Components. И куда же современное приложение без Dependency Injection (DI).

Создание ViewModel и доставка зависимостей в ее конструктор с помощью DI - нетривиальная задача, так как создать ViewModel просто через конструктор неправильно, нужно делать это через ViewModelProvider.Factory.

В статье разбирается как решить эту задачу с помощью Dagger и Koin.
#ArchitectureComponents #ViewModel

Should I use Jetpack ViewModel?

Архитектура MVVM на основе Jetpack на сегодня довольно популярна в Android разработке. Вы задумывались так ли много проблем решает ViewModel из Jetpack?

Автор в своей статье приводит доводы, которые заставят вас задуматься так ли все просто и помогут найти проблемы
#Hilt #ViewModel

Using Hilt’s ViewModelComponent

В Dagger 2.31 появился ViewModelComponent и соответствующий Scope. Для того чтобы переиспользовать сущности за пределами жизни Activity у нас существует теперь 2 scope: @ViewModelScoped и @ActivityRetainedScoped
#Compose #ViewModel #Flow

Better handling states between ViewModel and Composable

В статье рассказывается как лучше соединить изменение состояния из ViewModel в Compose на основе Coroutines Flow
#ViewModel #Dagger

Способы инжектить ViewModel с помощью Dagger: что может пойти не так

Рецепт как соединить DI через Dagger с Arch Components, чтобы делать inject ViewModel и зависимостей в них
#compose #viewmodel #navigation

Jetpack Compose navigation architecture with ViewModels

Вариант организации навигации с Jetpack Compose, который предлагает Google и как туда вписать ViewModel
#viewmodel #livedata #flow

Kotlin’s Flow in ViewModels: it’s complicated

Разбор реактивных подходов в ViewModel: LiveData, Flow, StateFlow, сравнение и почему LiveData ещё может быть актуальна
#compose #viewmodel

Compose UI and the death of ViewModel

Рассуждения на тему, что при использовании Jetpack Compose ViewModel больше не нужна т.к. не её жизненный цикл привязан к жизни Activity/Fragment.

Моё мнение, что нужно правильнее организовать хранение ViewModel и привязать его к правильному scope Compose функции. Например, уже сейчас есть привязка к графу навигации
#viewmodel

Don't let ViewModel knew about framework level dependencies

Пример почему использовать что-то из Android SDK, за исключение JDK классов, является плохим и создаст вам проблемы в тестах и как абстрагироваться от Android Framework
#compose #viewmodel

ViewModels using Compose: MutableStateFlows or MutableStates?

Руководство как организовать сохранение состояния между пересозданиями процесса, когда вы используете Compose в центре которого состояние. Автор использует ViewModel + SavedStateHandle.
Сравнение подходов между хранением состояния в. ViewModel в видео одного объекте или множества свойств внутри ViewModel. Подробности тут (EN, 4 мин, ссылка без VPN). Делитесь в комментариях какой подход выбираете вы и почему

#viewmodel #architecture
Обновления Lifecycle.2.8.0-alpha03 заслуживают отдельного поста
👉 ViewModel.viewModelScope теперь можно перегрузить через конструктор. Сможете свои параметры CoroutineContext задать
👉 Артефакт lifecycle-viewmodel теперь мультиплатформенный, а также все API в них ViewModelViewModelStoreViewModelStoreOwner, и ViewModelProvider
👉 Прошла миграция с Java class на Kotlin KClass

#jetpackupdate #kmp #jetpack #viewmodel
Обновления библиотек Jetpack Lifecycle 2.8.0

Lifecycle
👉 LocalLifecycleOwner из Compose переехал в lifecycle-runtime-compose
👉 Новые Composable API dropUnlessResumed и dropUnlessStarted что позволяет лямбду вызывать только когда LifecycleOwner достигнет состояния Resumed/Started соотвественно и не будет вызывать когда выйдет из него. Например, полезно для навигации
👉 LifecycleStartEffect и LifecycleResumeEffect бросают ошибку если не задать key. По аналоги с DisposableEffect
👉 API Lifecycle, LifecycleOwner, LifecycleObserver, Lifecycle.State, Lifecycle.Event и LifecycleRegistry теперь являются частью мультиплатформенных модулей

ViewModel
👉 ViewModel теперь позволяет передать произвольный CoroutineScope при создании. Полезно для тестов и не только
👉 ViewModel переписали на Kotlin и перешли с Closable на AutoClosable из Kotlin
👉 API ViewModel, ViewModelStore, ViewModelStoreOwner и ViewModelProvider теперь являются частью мультиплатформенных модулей
👉 ViewModelProvider.NewInstanceFactory и ViewModelProvider.AndroidViewModelFactory доступны только на Android
👉 Для всех таргетов не Android должна быть обязательна указана фабрика для ViewModel

LiveData
👉 Переписали NullSafeMutableLiveData

#lifecycle #viewmodel #compose #kmp
Библиотека Jetpack SavedState получила поддержку 👩‍💻 KMP (пока в альфе). Поддерживаются Android, iOS, Linux, Mac и JVM. Появился новый тип SavedState, который является alias-ом для Bundle в Android, а на других платформах - Map<String, Any>. Работа происходит через SavedStateReader и SavedStateWriter, обёрнутые Kotlin DSL.

VIewModel также получила поддержку KMP Saved State в новой альфе

#kmp #jetpack #viewmodel
Please open Telegram to view this post
VIEW IN TELEGRAM
🪙 Полный разбор Jetpack ViewModel (42 мин)

Полный разбор ViewModel, что позволит вам прокачаться в знаниях, узнать глубже API, которое используете, и ответить на вопросы на собеседованиях как Senior. Весь разбор на реальном коде в IDE

Что в видео:
👉 как удобно использовать
👉 Создание нестандартного ViewModelStore
👉 создание собственных фабрик
👉 как ViewModel пережить смерть процесса, а не только поворот экрана
🏝 Использование в Kotlin Multiplatform

Видео доступно по подписке в Telegram и на Boosty (лучше тут), либо единоразовая покупка тут

#AndroidBroadcast #viewmodel #jetpack #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 В новой альфе Jetpack Lifecycle 2.9.0 добавили возможность симулировать смерть процесс для ViewModel и проверить как она будет восстанавливаться

#viewmodel #jetpack #jetpackupdate #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Погружение в код реализации Jetpack ViewModel (EN, 5м)

Разбор как реализована Jetpack ViewModel после добавления поддержки KMP: код в класса, AutoClosable, viewModelScope

Для платных подписчиков на Boosty можно найти обзор всех фичей ViewModel, которые будут полезны вам

#android #kmp #jetpack #androidx #viewmodel #подкапотом
🤖 Альтернативный способ обработке one-off событий из ViewModel (EN, 10м)

В статье рассказывается в чем сложность с обработкой одноразовых событий, которые надо передать из ViewModel в UI.

Автор рассматривает способ через callback интерфейс в конструкторе ViewModel
@HiltViewModel
class MyViewModel @Inject constructor(
// inject the interface
private val toastMessages: ToastMessages,
) : ViewModel() {

fun doSomething() {
viewModelScope.launch {
try {
// execute async operation here
} catch (e: CustomException) {
// initiate a one-off event
toastMessages.showToast(e.localizedMessage)
}
}
}
}


🔗 Альтернативная ссылка на статью

#android #viewmodel #dagger #hilt
Please open Telegram to view this post
VIEW IN TELEGRAM