Android mimari bileşenlerinde ViewModel durumunu nasıl saklarım?
sobes.tech yapay zeka
AI'dan gelen yanıt
ViewModel durumunu birkaç farklı yöntemle saklayabilirsiniz:
-
SavedStateHandle Kullanımı: Sürecin yok edilmesinden sonra durumu geri yüklemek için gereken küçük veri miktarlarını saklamak için tercih edilen yöntemdir.
SavedStateHandle, veri saklama ve alma için Map-benzeri bir arayüz sağlar.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) içinde durumu kaydetme:
onSaveInstanceStateile birlikte kullanılır, kendiActivityveyaFragment'in verilerini kaydetmek için, doğrudanViewModeldeğil. Bu veriler,ViewModeloluşturulurken kullanılmak üzere kullanılabilir.// Activity veya Fragment'ta override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) // ViewModel'in başlatılması için kullanılacak verilerin kaydedilmesi outState.putString("some_data_for_vm", "önemli değer") } // ViewModel'de verilerin kullanımı (fabrika aracılığıyla) 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("Bilinmeyen ViewModel sınıfı") } } class MyViewModel(private val initialData: String) : ViewModel() { // Durumu geri yüklemek için initialData kullanımı } -
Kalıcı depolama alanında veri kaydetme: Daha karmaşık veya büyük veri hacimleri için SharedPreferences, veritabanları (örneğin, Room) veya dosyalar kullanılabilir.
ViewModel, bu verilere erişimi yöneten bir repository ile etkileşime geçebilir.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 örneği class UserRepository(private val userDao: UserDao) { fun saveUser(user: User) { // Veritabanına kaydetme mantığı } fun getUser(id: Long): LiveData<User> { // Veritabanından alma mantığı } }
Yöntem seçimi, saklanacak veri türüne ve hacmine, ayrıca hangi durum kurtarma senaryolarının desteklenmesi gerektiğine bağlıdır (örneğin, süreç yok edilmesi vs. yapılandırma değişikliği). SavedStateHandle, yok edilme sonrası durumu korumak ve UI'yi geri yüklemek için en uygun olanıdır.