Android ViewModels

Merhaba arkadaşlar bu yazıda android’in yaşam döngüsünden verilerini güvenli bir şekilde tutmak isteyenler ve benim için bir kaç not düşeceğim. Öncelikle bu yazıyı buradaki linkte   okumuştum hoşuma gitti ve bende Türkçe olarak not alayım dedim.  İlk önce şu resmi incelemenizi ve sorunu anlamınızı istiyorum. 

Resim Kaynağı: https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e

Evet burada basit bir skor tablosu uygulaması yapılmış ancak . Gördüğünüz gibi ekranı ters çevirince tüm skorlar sıfırlanıyor. Yani uygulamayı kullananın kesinlikle telefonu yan çevirmemesi lazım. :)) :(((  değişik bir durum. 

Bildiğiniz gibi android yaşam dönügüsünde eğer telefonu yan çevirirseniz Activity Destroy olup tekrardan onCreate çalışıyor. Zaten olay da burada kopuyor. onCreate() tekrar çalışınca değerler sıfırlanıyor ve sonuç yukarıdaki gibi…..

Google android ekibi 2017 yılında bu soruna bir çözüm getirdiğini duyurdu ve ortaya ViewModel diye bir şey çıktı. Bu ViewModel class ‘ı uygulamamızın arayüzündeki verilerin Activity’nin yaşam döngüsünden kaynaklı değişimlerden etkilenmemesini sağlıyor. Yukarıdaki örnek bu konuya açıklık getiriyor. 

Peki bu sorun neden ortaya çıkıyor ? Altında yatan problem nedir ?

Bakın aşağıda bir aktivitenin yaşam döngüsünü gösteriliyor. 

 

İşte aktivitenin yaşam döngüsü sırasında  verilerimiz kaybolabiliyor ve ya başına iş gelebiliyor.  Dolayısıyla yukarıdaki gibi yan çevirince onDestroy çalışıp tekrar onCreate çalıştığından veri sıfırlanmak zorunda kalıyor . Eğer verimizi Aşağıdaki gibi aktivitenin yaşam döngüsü dışında tutarsak bu problem  hallolmuş olacak 

Viewmodel görüldüğü gibi aktivite finish olana kadar devam ediyor.  aktivite rotated olsa bile ViewModel scope değişmiyor.  Şimdi adım adım bu yapıyı nasıl kuracağız ona bakalım. 

3 Adımda ViewModel Oluşturma ve Kullanma 

  1. Adım : Verilerimizi tutmak için bir class oluşturup bunu ViewModel Class’ından Extend etmek 
  2. Adım : ViewModel nesnemiz ile UIController arası bağlantıyı sağlama
  3. Adım : ViewModeli UIController içinde kullanma 

 

  1. Adım : Verilerimizi tutmak için bir class oluşturup bunu ViewModel Class’ından Extend etmek 

isterseniz encapsulation ile kapsülleyebilirsiniz .

2.Adım : ViewModel nesnemiz ile UIController arası bağlantıyı sağlama

Bu adımda viewModel’i UIController içinde kullanacağız . ViewModel nesnemiz Context tutmamaktadır . O yüzden Context vererek kullanıma hazır hale getirmemiz gerekiyor. 

3.Adım : ViewModeli UIController içinde kullanma 

Şimdi kullanalım. 

ViewModel yapısı LiveData nesnesi ile çok uyumlu bir şekilde çalışmaktadır. Bu nesnenin Observable yapısı sayesinde anlık olarak nesneye bağlı alanlardaki değerleri update etmektedir. Yine fragmentler arası ileşitimdede kullanılabilir. 

Kaynak: https://medium.com/androiddevelopers/viewmodels-a-simple-example-ed5ac416317e

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir