Что нового в Andrpoid Jetpack от 29 июня 2022
Кирилл Розов. Android BroadcastОбновление Android Jetpack в этот раз содердит много стабильных обновлений, которые построены на новых API ViewModel в Lifecycle 2.5.0. Все самые интересные изменения ниже, е если хотите больше подробностей то смотрите их здесь
Lifecycle 2.5.0 Stable
- SavedStateHandle поддерживает мониторинг значений через StateFlow, а не только LiveData
- ViewModel CreationExtras - новый способ передачи параметров в ViewModel при ее создании. Теперь не нужно использовать
AndroidViewModelFactory
илиAbstractSavedStateViewModelFactory
для получения Application или SavedStateHandle
class CustomFactory : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>, extras: CreationExtras): T = when (modelClass) { HomeViewModel::class -> { // Get the Application object from extras val application = checkNotNull(extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY]) HomeViewModel(application) } DetailViewModel::class -> { val savedStateHandle = extras.createSavedStateHandle() DetailViewModel(savedStateHandle) } else -> error("Unknown class $modelClass") } as T }
- Kotlin DSL для создания удобного описания ViewModelProvider.Factory с несколькими типами ViewModel
val customFactory = viewModelFactory { initializer { val application = checkNotNull(get(ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY)) HomeViewModel(application) } initializer { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) } }
- Создать ViewModel в Compose теперь можно без использования
ViewModelProvider.Factory
с помощью функцииviewModel()
val detailViewModel = viewModel { val savedStateHandle = createSavedStateHandle() DetailViewModel(savedStateHandle) }
- Интеграция SavedStateHandle с Compose, позволя получить поведение аналогичное rememberSaveable, но под капотом будет
- ViewModel теперь поддерживает Closable объекты, что позволяется вам их регистрировать (
ViewModel.addClosable()
или через конструкторViewModel
(Closeable[])
) и отменять при вызове ViewModel.onClear() автоматически и не перегружать этот метод.
Например, теперь так можно сделать с CoroutineScope в ViewModel
class CloseableCoroutineScope( context: CoroutineContext = SupervisorJob() + Dispatchers.Main.immediate ) : Closeable, CoroutineScope { override val coroutineContext: CoroutineContext = context override fun close() { coroutineContext.cancel() } } class TestScopeViewModel( val customScope: CoroutineScope = CloseableCoroutineScope() ) : ViewModel(customScope) { // отменять custom scope не надо самостоятельно }
- LifecycleRegistry теперь удаляет всех подписчиков после достижения состояния Destroyed
Navigation 2.5.0 Stable
- Поддержка CreationExtras из Lifecycle 2.5.0
- Navigation SafeArgs плагин теперь предоставляет возможность указать пакет отличный от applicationId
- visibleEntries API вышло в stable. API позволяет все элементы графа, которые сейчас видны
Fragment 1.5.0 Stable
- Поддержка CreationExtras из Lifecycle 2.5.0
- DialogFragment теперь по умолчанию возвращает ComponentDialog в onCreateDialog()
- Рефакторинг сохранения состояния через onSavedInstanceState(): сохранение результата Fragment Result API, состояние Fragment сохраняется отдельно от FragmentManager, изменен способ сохранения состояния FragmentManager
- Улучшения в FragmentStrictMode
Activity 1.5.0 Stable
- ComponentDialog - подкласс Dialog, который поддерживает OnBackPressedDispatcher
- ComponentActivity теперь содержит callback интерфейсы, которые используются вместо callback методов в Activity: OnNewIntentProvider, OnConfigurationChangedProvider, OnTrimMemoryProvider, OnPictureInPictureModeChangedProvider, OnMultiWindowModeChangedProvider
- Поддержка CreationExtras из Lifecycle 2.5.0
- Конструктор
ActivityResultContracts.CreateDocument
без параметров теперь deprecated
SavedState 1.2.0 Stable
- Библиотека переписана на Kotlin
- SavedStateRegistry позволяет получить предыдущий зарегистрированный SavedStateProvider
- SavedStateRegistryController поддерживает раннюю регистрацию
SavedStateRegistry через performAttach()
- SavedStateRegistry больше не сохраняет пустые Bundle
Collections 1.3.0 Alpha 01
Библиотеку коллекций переписывают на Kotlin и отказывают от ktx артефакта
Camera 1.1.0
- Все библиотеки CameraX теперь синхронизированы по версиям
- Поддержка работы с видео
- Поддержка конвертации YUV в RGB и поворотов
- Корректная работа в многооконном режиме
- Исправление багов в работе CameraX на складных устройствах
- Возможность получения информации о всех камерах на устройствах
- Возможность проверить поддержку FocusMeteringAction
- Возможность получать информацию о разрешении для превью,
ImageCapture и ImageAnalysis
- Возможность управлять качеством выходного JPEG файла
- Экспериментальное API для интеграции со сторонними библиотеками процессинга изображений, например ML Kit
- Множество API перешли из экспериментальных в стабильные
- Исправление багов
Compose Compiler 1.2.0 Stable
- Поддержка Kotlin 1.7.0