0Pricing
Android Academy · Ders

Neden ViewModel Kullanılır

Yapılandırma değişikliklerini sorunsuz biçimde atlatın.

Neden ViewModel Kullanılır, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

ViewModel Nedir?

Bir ViewModel, kullanıcı arayüzüyle ilgili verileri yaşam döngüsünü dikkate alarak depolamak ve yönetmek için tasarlanmış bir Android mimarisi bileşenidir.

Ekran döndürme gibi yapılandırma değişikliklerinden sonra da varlığını sürdürür. Böylece sistem kullanıcı arayüzünü her yeniden oluşturduğunda verileriniz yok edilip yeniden oluşturulmaz.

Yapılandırma Değişikliği Sorunu

Cihazı döndürdüğünüzde Android, Activity'yi yok eder ve yeniden oluşturur. Activity veya Composable içinde tutulan tüm durum kaybolur.

  • Sayaç sıfıra döner.
  • Yüklenmiş liste kaybolur.
  • Bir ağ isteği yeniden başlatılabilir.

ViewModel, Activity örneğinin yaşam döngüsünün dışında yaşayarak bu sorunu çözer.

ViewModel Nasıl Hayatta Kalır?

Çerçeve, yeniden oluşturma işlemleri boyunca aynı ViewModel örneğini canlı tutar. Yeni Activity oluşturulduğunda kendisine yeni bir ViewModel yerine mevcut ViewModel verilir.

class CounterViewModel : ViewModel() {
    var count = 0
        private set

    fun increment() {
        count++
    }
}

Compose'ta ViewModel Alma

Jetpack Compose'ta genellikle viewModel() yardımcı işleviyle bir ViewModel alırsınız. Bu işlev, yaşam döngüsü sahibi için aynı örneği döndürür.

import androidx.lifecycle.viewmodel.compose.viewModel

@Composable
fun CounterScreen(
    vm: CounterViewModel = viewModel()
) {
    Text("Count: " + vm.count)
}

Sorumlulukların Ayrılması

Bir ViewModel, sorumlulukların temiz bir şekilde ayrılmasını teşvik eder:

  • Kullanıcı arayüzü katmanı (Composable'lar/Activity'ler) yalnızca durumu işler ve olayları iletir.
  • ViewModel, durumu ve iş mantığını barındırır.

Bu, kullanıcı arayüzünü daha yalın, mantığı da sınanması daha kolay hâle getirir.

ViewModel Kapsamı ve Sahipliği

Bir ViewModel, genellikle bir Activity, Fragment veya gezinme geri yığını girdisi olan bir ViewModelStoreOwner'a kapsamlanır.

Sahibi kalıcı olarak yok edildiğinde otomatik olarak temizlenir. Örneğin kullanıcı geri düğmesine basarak Activity'yi sonlandırdığında bu gerçekleşir.

onCleared Geri Çağrısı

ViewModel tamamen yok edildiğinde çerçeve onCleared() çağrısını yapar. Açtığınız kaynakları serbest bırakmak için bunu kullanın.

class MyViewModel : ViewModel() {
    override fun onCleared() {
        super.onCleared()
        // cancel jobs, close listeners
    }
}

ViewModel İçine Konulmaması Gerekenler

Bir ViewModel içinde Görünümlere, Activity'lere veya kullanıcı arayüzüne bağlı herhangi bir Context'e hiçbir zaman başvuru tutmayın. ViewModel, Activity'den daha uzun süre yaşadığı için bu durum bellek sızıntılarına yol açar.

Uygulama bağlamına ihtiyacınız varsa bunun yerine AndroidViewModel kullanın.

Uygulama Bağlamı İçin AndroidViewModel

Gerçekten bir Context'e ihtiyacınız olduğunda, uzun ömürlü uygulama bağlamını güvenli şekilde sağlayan AndroidViewModel sınıfını genişletin.

class PrefsViewModel(
    app: Application
) : AndroidViewModel(app) {
    private val context = getApplication<Application>()
}

Yapıcı Bağımsız Değişkenlerini Geçirme

Bağımlılıkları (örneğin bir depoyu) bir ViewModel'e eklemek için ViewModelFactory veya Hilt gibi bir DI çatısı kullanın. Hilt'i bu öğrenim yolunun ilerleyen bölümünde ele alacağız.

class UserViewModel(
    private val repo: UserRepository
) : ViewModel() {
    // repo provided via a factory or Hilt
}

ViewModel'ler Neden Önemlidir?

ViewModel'ler, modern Android mimarisinin temel taşlarından biridir. Size şunları sağlar:

  • Yapılandırma değişiklikleri boyunca varlığını sürdürme.
  • Kullanıcı arayüzü ile mantık arasında temiz bir ayrım.
  • Öngörülebilir ve sınanabilir durum yönetimi.

Hızlı Kontrol

ViewModel'lerin neden kullanıldığını anlayıp anlamadığınızı sınayın.

Özet

Şunları öğrendiniz:

  • Bir ViewModel, kullanıcı arayüzü durumunu depolar ve yapılandırma değişikliklerinden sonra da varlığını sürdürür.
  • Sızıntıları önlemek için hiçbir zaman View veya Activity başvuruları tutmamalıdır.
  • Bir sahibe kapsamlanır ve onCleared() aracılığıyla temizlenir.
  • AndroidViewModel, güvenli bir uygulama Context'i sağlar.

Sıkça Sorulan Sorular

“Neden ViewModel Kullanılır” dersi ücretsiz mi?

Evet — “Neden ViewModel Kullanılır” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“Neden ViewModel Kullanılır” dersinde ne öğreneceğim?

Yapılandırma değişikliklerini sorunsuz biçimde atlatın. Android Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Android Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Android Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“Neden ViewModel Kullanılır” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Neden ViewModel Kullanılır
  2. ViewModel'den Durum Sunma
  3. Android Yaşam Döngüsü
  4. collectAsStateWithLifecycle
← Android Academy Sayfasına Dön