Android arxitektura komponentlarida ViewModel holatini qanday saqlash mumkin?
sobes.tech AI
AIdan javob
ViewModel holatini bir necha usul bilan saqlash mumkin:
-
SavedStateHandle dan foydalanish: Jarayonning buzilishidan keyin holatni tiklash uchun zarur bo'lgan kichik ma'lumotlarni saqlash uchun afzal ko'rilgan usul.
SavedStateHandlema'lumotlarni saqlash va olish uchun Map-ga o'xshash interfeys taqdim etadi.class MyViewModel(private val state: SavedStateHandle) : ViewModel() { private val _name = state.getLiveData<String>("name") val name: LiveData<String> = _name fun saveName(newName: String) { state.set("name", newName) } } -
Bundle (Bundle) ichida holatni saqlash:
onSaveInstanceStatebilan birga ishlatiladi, o'ziningActivityyokiFragmentma'lumotlarini saqlash uchun, to'g'ridan-to'g'riViewModelemas. Bu ma'lumotlarViewModelni yaratishda foydalanilishi mumkin.// Activity yoki Fragmentda override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) // ViewModelni boshlash uchun foydalaniladigan ma'lumotlarni saqlash outState.putString("some_data_for_vm", "muhim qiymat") } // ViewModelda ma'lumotlardan foydalanish (fabrika orqali) class MyViewModelFactory(private val initialData: String) : ViewModelProvider.Factory { override fun <T : ViewModel?> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(MyViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return MyViewModel(initialData) as T } throw IllegalArgumentException("Noma'lum ViewModel sinfi") } } class MyViewModel(private val initialData: String) : ViewModel() { // Holatni tiklash uchun initialData dan foydalanish } -
Ma'lumotlarni doimiy saqlash joyiga saqlash: Murakkab yoki katta hajmdagi ma'lumotlar uchun SharedPreferences, ma'lumotlar bazalari (masalan, Room) yoki fayllardan foydalanish mumkin.
ViewModelbu ma'lumotlarga kirishni boshqaradigan repository bilan hamkorlik qilishi mumkin.class MyViewModel(private val userRepository: UserRepository) : ViewModel() { fun saveUser(user: User) { userRepository.saveUser(user) } fun getUser(id: Long): LiveData<User> { return userRepository.getUser(id) } } // UserRepository misoli class UserRepository(private val userDao: UserDao) { fun saveUser(user: User) { // Ma'lumotlar bazasiga saqlash logikasi } fun getUser(id: Long): LiveData<User> { // Ma'lumotlar bazasidan olish logikasi } }
Usul tanlovi saqlanadigan ma'lumotning turi va hajmiga, shuningdek, qanday holatni tiklash scenariyalarini qo'llab-quvvatlashga bog'liq (masalan, jarayonning buzilishi yoki konfiguratsiya o'zgarishi). SavedStateHandle jarayon buzilishidan keyin ham saqlanadigan va UI-ni tiklash uchun eng mos usul hisoblanadi.