Mobil uygulamalarda State Restoration: nedir, mekanizması ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-05-18 Okuma süresi: 8 dk

State Restoration, bir uygulamanın yeniden başlatılması veya simge durumuna küçültülmesinden sonra kullanıcı arayüzünü kaydetmeye ve geri yüklemeye olanak tanıyan bir mobil işletim sistemi mekanizmasıdır. Sistem, UI durumunu belleğe veya kalıcı depolama alanına kaydeder ve yeniden açıldığında geri yükler. Android Developers (2025)'a göre State Restoration, kaliteli bir kullanıcı deneyimi hedefleyen uygulamalar için zorunludur. State Restoration, bir uygulama beklenmedik şekilde sonlandığında veri kaybını önlemek için kritik öneme sahiptir.

Önemli Noktalar

  • State Restoration — uygulama yeniden başlatıldığında UI'yı kaydetme ve geri yükleme mekanizması, kullanıcı verilerinin ve bağlamının kaybını önler.
  • Yaşam döngüsü — geri yükleme, simge durumuna küçültme, cihaz yeniden başlatma veya sistem tarafından uygulamanın kapatılmasından sonra yeniden başlatmada tetiklenir.
  • Platformlar — iOS, State Restoration'ı UIKit (NSUserActivity, UIStateRestoring) aracılığıyla destekler; Android ise SavedStateHandle ve ViewModel aracılığıyla destekler.
  • Kaydedilecek veriler — kaydırma konumu, formlara girilen veriler, gezinme durumu, multimedya içeriği ve seçilen öğeler.
  • Uygulama — durumun Bundle veya NSData'ya serileştirilmesini ve ilgili yaşam döngüsü yöntemlerinde geri yüklenmesini gerektirir.

State Restoration Nedir?

State Restoration (durum geri yükleme), bir uygulamanın kullanıcı arayüzünün mevcut durumunu kaydetmeye ve sonlandırma veya yeniden başlatmadan sonra geri yüklemeye olanak tanıyan bir sistem mekanizmasıdır. Bir kullanıcı uygulamayı simge durumuna küçülttüğünde veya sistem kaynakları boşaltmak için uygulamayı kapattığında, State Restoration temel UI parametrelerini yakalar ve bunları şifrelenmiş depolama alanına kaydeder.

State Restoration olmadan, kullanıcılar uygulamalar arasında geçiş yaparken kaydedilmemiş tüm verileri kaybeder. Örneğin, doldurulmuş bir geri bildirim formu, uzun bir arama sorgusu veya kısmen görüntülenmiş bir haber listesi — tüm bunlar yeniden başlatmada kaybolur. State Restoration, simge durumuna küçültme anında ViewController veya Activity durumunu otomatik olarak yakalayarak bu sorunu çözer.

Mekanizma sistem düzeyinde çalışır ve her iki ana mobil platform tarafından da desteklenir. iOS, State Restoration'ı NSUserActivity ve UIStateRestoring protokolü aracılığıyla sağlarken, Android bunu Jetpack mimari bileşenlerindeki SavedStateHandle ve ViewModel aracılığıyla sağlar. Uygulama farklılık gösterir, ancak kavram aynıdır.

State Restoration Nasıl Çalışır?

State Restoration süreci iki aşamaya ayrılır: kaydetme ve geri yükleme. Kaydetme aşamasında sistem, ilgili yaşam döngüsü yöntemlerini çağırır ve uygulamanın mevcut UI durumunu kompakt bir temsile serileştirmesi gerekir. Geri yükleme aşamasında sistem, kaydedilen verileri geri gönderir ve uygulama, UI'yı geri yüklemek için bunların serisini çözer.

Durum kaydetme mekanizması

Kaydetme, uygulama arka plana geçtiğinde veya yakın bir sonlandırma sinyali aldığında sistem tarafından başlatılır. iOS'ta UIViewController'ın encodeRestorableState yöntemi çağrılır; Android'de Activity'nin onSaveInstanceState'ı veya SavedStateHandle aracılığıyla kaydetme tetiklenir. Veriler, ilkel türleri destekleyen bir biçimde serileştirilir: dizeler, sayılar, bayt dizileri ve Parcelable nesneleri.

Kaydedilen veri miktarı minimum düzeyde olmalıdır — sistem, kaydedilmiş durum paketinin boyutuna sınırlamalar getirir. Android'de sınır, işlem başına yaklaşık 50 KB'dir. Sınırın aşılması, TransactionTooLargeException istisnasına neden olur. Bu nedenle mimarlar, yalnızca tanımlayıcıları ve anahtarları kaydetmeyi ve geri yükleme sırasında tam verileri kalıcı depolama alanından yüklemeyi önerir.

Kaydedilmiş durumdan UI geri yükleme

Geri yükleme sırasında sistem, başlatma anında kaydedilmiş veri paketini uygulamaya iletir. iOS'ta decodeRestorableState yöntemi çağrılır; Android'de onRestoreInstanceState veya SavedStateHandle'dan okuma kullanılır. Uygulama, paketten tanımlayıcıları ve anahtarları çıkarır ve UI'yı geri yükler: kaydırma konumu, seçilen öğeler, girilen veriler.

Geri yüklemenin yeni bir işlemde gerçekleşebileceğini unutmamak önemlidir. Uygulama bellekten tamamen boşaltılmışsa, işlem yeniden oluşturulur ve bellekteki tüm nesneler yoktur. Bu nedenle durum, serileştirilebilir olmalı ve önceki oturumun çalışma zamanı bağlamından bağımsız olmalıdır. Bu, özellikle birden çok giriş alanına sahip büyük formlar ve uzun çok sayfalı arayüzler için kritiktir.

kotlin
class MainActivity : AppCompatActivity() {
    private var searchQuery: String = ""

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("search_query", searchQuery)
    }

    override fun onRestoreInstanceState(savedState: Bundle) {
        super.onRestoreInstanceState(savedState)
        searchQuery = savedState.getString("search_query", "")!!
        restoreSearchUI(searchQuery)
    }
}

iOS ve Android'de State Restoration

State Restoration uygulaması platformlar arasında önemli ölçüde farklılık gösterir. iOS, storyboard'lar ve UIKit protokolleri aracılığıyla bildirimsel bir yaklaşım kullanırken, Android, Activity yaşam döngüsü yöntemleri ve Jetpack mimari bileşenleri aracılığıyla zorunlu bir yaklaşım kullanır. Yaklaşım seçimi, hedef platforma ve uygulama mimarisine bağlıdır.

iOS'ta (UIKit) State Restoration

iOS'ta State Restoration üç bileşen üzerine kurulmuştur: UIApplication genel süreci yönetir, UIViewController UIStateRestoring protokolünü uygular ve NSUserActivity gezinme geri yüklemesi için veri depolar. Etkinleştirmek için UIViewController'da restorationIdentifier ayarlanmalı ve encodeRestorableState ile decodeRestorableState uygulanmalıdır.

iOS, restorationIdentifier ayarlanmışsa gezinme denetleyicisinin (UINavigationController) ve tüm iç içe ViewController'ların durumunu otomatik olarak kaydeder. Sistem, gezinme yığınını yönetir ve onu orijinal durumuna geri yükler. Ancak, denetleyicilerin içindeki veriler (girilen metin, kaydırma konumu) geliştirici tarafından açıkça kaydedilmelidir.

Android'de (SavedStateHandle) State Restoration

Android'de State Restoration'a modern yaklaşım SavedStateHandle — AndroidX Lifecycle kitaplığından bir bileşen — üzerine kurulmuştur. SavedStateHandle, ViewModel içinde erişilebilirdir ve yapılandırma değişikliklerinde (ekran döndürme) ve işlem yeniden başlatmada verileri otomatik olarak kaydeder ve geri yükler. Veriler bir Bundle'da depolanır ve otomatik olarak serileştirilir.

SavedStateHandle, LiveData desteğiyle bir anahtar-değer deposu gibi davranır. Yapılandırma değişikliklerinde veriler otomatik olarak kaydedilir ve geri yüklenir. İşlem yeniden başlatmayı desteklemek için ViewModel, SavedStateViewModelFactory aracılığıyla oluşturulmalıdır — bu, ViewModel'in uygulamanın tamamen sonlandırılmasından sonra da devam etmesini sağlar.

kotlin
class SearchViewModel(
    private val savedStateHandle: SavedStateHandle
) : ViewModel() {

    companion object {
        private val KEY_QUERY = string("search_query")
    }

    fun getSearchQuery(): String? = savedStateHandle[KEY_QUERY]

    fun saveSearchQuery(query: String) {
        savedStateHandle[KEY_QUERY] = query
    }
}

Kodda State Restoration Uygulaması

State Restoration'ın pratik uygulaması, birkaç hususun dikkate alınmasını gerektirir: doğru depolama alanını seçme, kaydedilecek veri miktarını belirleme ve çeşitli sonlandırma senaryolarını test etme. Flutter uygulaması için state_restoration paketini kullanarak adım adım uygulamayı inceleyelim.

dart
class RestorableSearchField extends RestorableProperty<String> {
  String _value = '';

  @override
  String get value => _value;

  @override
  void set value(String newValue) {
    if (_value != newValue) {
      _value = newValue;
      notifyListeners();
    }
  }

  @override
  String? toPrimitives() => _value;

  @override
  void fromPrimitives(String? data) {
    _value = data ?? '';
  }
}

Uygulama yaparken kaydetme sınırlarını hatırlamak önemlidir. Her UI alanının geri yüklenmesi gerekmez. Uzun bir listede kaydırma konumu — evet. Geçici bir animasyon durumu — hayır. Geliştirici, hangi verilerin kullanıcı deneyimi için kritik olduğunu ve hangilerinin rahatlık kaybı olmadan güvenle sıfırlanabileceğini bilinçli olarak seçmelidir.

State Restoration'ı test etmek, işlem sonlandırmayı simüle etmeyi gerektiren ayrı bir görevdir. Android'de bu, adb shell am kill komutuyla yapılabilir; iOS'ta Xcode'da sonlandırma simülasyonuyla yapılabilir. Espresso ve XCTest gibi UI test çerçeveleri, durum geri yüklemeyi doğrulamak için özel yöntemler sağlar.

State Restoration En İyi Uygulamaları

Birinci kural — verileri değil, tanımlayıcıları kaydedin. Yüz alanlı tam nesneyi kaydetmek yerine, benzersiz tanımlayıcısını kaydedin ve geri yüklemede veritabanından veya API'den gerçek verileri yükleyin. Bu, Bundle'da yer tasarrufu sağlar ve geri yükleme anında verilerin güncelliğini garanti eder.

İkinci kural — tüm senaryoları test edin. Ekran döndürmeden sonra, simge durumuna küçültüp bir saat sonra geri döndükten sonra, sistemin bellek yetersizliği nedeniyle uygulamayı sonlandırmasından sonra geri yüklemeyi kontrol edin. Her senaryo, işletim sistemi durumuna ve mevcut kaynaklara bağlı olarak farklı davranabilir.

Üçüncü kural — özel değil, sistem mekanizmalarını kullanın. iOS ve Android, kendi platformları için optimize edilmiş State Restoration için yerleşik API'ler sağlar. SharedPreferences veya UserDefaults aracılığıyla özel uygulama, eşitleme sorunlarına ve geri yükleme sırasında beklenmeyen davranışlara yol açabilir.

Dördüncü kural — durum yokluğunu işleyin. İlk başlatmada veya verilerin temizlenmesinden sonra durum mevcut olmayabilir. UI, özel durumlar oluşturmadan başlangıç durumunda doğru şekilde çalışmalıdır. Kullanmadan önce tüm kaydedilmiş verileri null için kontrol edin ve varsayılan değerler sağlayın.

Beşinci kural — kaydedilmiş anahtarları belgeleyin. Bir projede düzinelerce ekran olduğunda ve her biri birden çok alan kaydettiğinde, merkezi anahtar yönetimi olmadan kaos oluşur. Her modülde State Restoration için anahtar sabitlerine sahip tek bir sınıf veya dosya oluşturun. Bu, bakımı basitleştirir ve yeniden düzenleme sırasında yanlışlıkla verilerin üzerine yazılmasını önler.

Sıkça Sorulan Sorular

Mobil uygulamalarda State Restoration nedir?

State Restoration, uygulamanın yeniden başlatılması veya simge durumuna küçültülmesinden sonra kullanıcı arayüzünü kaydeden ve geri yükleyen, veri ve kullanıcı bağlamı kaybını önleyen bir mekanizmadır.

State Restoration'ın veritabanına kaydetmekten farkı nedir?

State Restoration geçici UI durumunu (kaydırma konumu, form verileri) kaydederken, veritabanı kalıcı kullanıcı verilerini depolar. State Restoration, hacim sınırlamaları olan sistem mekanizmalarını (Bundle, NSData) kullanır.

Android'de State Restoration nasıl uygulanır?

AndroidX Lifecycle'dan ViewModel'de SavedStateHandle kullanın. Simge durumuna küçültmede verileri otomatik olarak kaydeder ve geri dönüşte geri yükler. Tam yeniden başlatma desteği için SavedStateViewModelFactory kullanın.

iOS'ta State Restoration nasıl uygulanır?

UIViewController'da restorationIdentifier ayarlayın ve encodeRestorableState ile decodeRestorableState yöntemlerini uygulayın. Gezinme için, denetleyici yığınında yolu koruyarak NSUserActivity kullanın.

State Restoration sırasında hangi veriler kaydedilmelidir?

Tam verileri değil, tanımlayıcıları kaydedin: seçilen öğenin kimliği, arama sorgusu, kaydırma konumu, geçiş durumları. Büyük nesneleri ve görselleri kaydetmekten kaçının.

Özet

  • State Restoration — uygulama yeniden başlatıldığında UI'yı kaydetme ve geri yükleme sistemi mekanizması, kullanıcı deneyimi için kritiktir.
  • iOS — gezinme ve denetleyici verilerini kaydetmek için UIStateRestoring protokolü ve NSUserActivity kullanır.
  • Android — otomatik durum kaydetme ve geri yükleme için ViewModel'de SavedStateHandle sağlar.
  • Flutter — widget durumunu kaydetmek için RestorableProperty ve RestorableStatefulWidget'ı destekler.
  • Sınırlama — kaydedilen veri boyutu sınırlıdır (~50 KB Android'de), yalnızca tanımlayıcıları kaydedin.
  • Test — tüm senaryoların kontrolü zorunludur: ekran döndürme, simge durumuna küçültme, sistem tarafından işlem sonlandırma.
  • Strateji — dosyalar veya SharedPreferences aracılığıyla özel uygulama yerine sistem API'lerini kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun