Android Architecture Components: ViewModel

Architecture Componentler serisinin 2. yazısı ile beraberiz. Bir önceki yazımda Room kütüphanesinden bahsetmiştim. Bu yazıda ise ViewModel’den bahsetmeye çalışacağım.

Bir activity düşünün ve bu activitye bir şekilde datanızın geldiğini farzedin(örneğin MVP design patterni ile presenterdan verileri buraya geliyor. Bu MVVM de olabilir, hiç farketmez). Kullanıcı cihazı yan çevirdiğinde ne olur? Eğer siz orientation changes için herhangi birşey yapmadıysanız, datalar gider. Yani aslında activity tekrardan çalıştırılmış, onCreate den başlayarak yaşam döngüsünü tekrardan başlatmıştır. Öncelikle ilk akla gelen çözüm nedir? Verileri tekrar restore edip göstereceğiz. Tabi bu kısım çoğu zaman içinden çıkılamaz hal alıyor ve çok can sıkıcı olabiliyor. İşte bunun için ViewModel bir çözüm sağlıyor.

Şimdi ViewModel tam olarak nasıl işliyor ona bir bakalım.

ViewModel, verileri UI için tutan ve lifecycle-aware olan bir componentir.

ViewModel lifecycle-aware dedik yani o an hangi lifecycle metodunda ise ondan haberdardır. Dolayısıyla configration change yapıldığında veriler canlı olarak kalır ve etkilenmez.

Yukarıda bir activity başlatıldığında, rotate edildiğinde ve sonlandırıldığından ViewModel nasıl davranır bunu görüyoruz. Yaşam döngüsü activity devam ettiği sürece devam eder sadece activity onDestroy olduğunda onCleared metodu çalıştırır.

Artık verileriniz her zaman güncel halini koruyacak.

Kullanım

Öncelikle dependecyleri app/build.gradle dosyasına alttaki gibi ekliyoruz.

Şimdi basit bir şekilde ViewModel kullanımını bir class üzerinde yapalım.

Yukarıdaki kod parçacığında userList adında bir listemiz var. Bu listeye verilerin bir şekilde (veritabanından, uzak sunucudan) geldiğini varsayın. ve classı ViewModel classından extend ediyoruz.

Şimdi bu ViewModeli bir activity üzerinde kullanalım ve listeyi orada çağıralım.

Gördüğünüz gibi ViewModelProviders.of() metodu ile viewmodeli activity içinde tanımlıyoruz ve sonrasında usersViewModel.getUserList()şeklinde ViewModel içindeki listeyi alıyoruz. İşte bu kadar

NOT: ViewModel ile onSaveInstanceState() aynı şey değil. Sakın olaki birbirinin yerine kullanmayın. ViewModel sadece orientation changes kısmında verilerin doğru bir şekilde tutulmasını sağlar. Örneğin activity process durdurulduğunda ViewModel verilerin düzgün bir şekilde tutulduğunun garantisini vermez.

https://developer.android.com/topic/libraries/architecture/viewmodel

Bir cevap yazın

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.