Что нового в Andrpoid Jetpack от 29 июня 2022

Что нового в 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
  • Поддержка 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

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

Report Page