LifecycleObserver ile App Background-Foreground Kontrolü

Güncelleme tarihi: 7 Haz 2021

LifecycleObserver, Android Jetpack Lifecycle mimari componentlerinin bir parçasıdır. Activity veya Fragment gibi Lifecycle uyumlu bir component'de Lifecycle'ın event ve state'lerini (foreground/background gibi) ayrı bir observer sınıfıyla gözlemleyebilmemizi sağlayan interface'dir.


Bu yazıda LifecycleObserver'ı daha detaylı inceleyip bir android uygulama'sının Background-Foreground geçişlerini bu sınıfla nasıl yakalayacağımızı öğreneceğiz.



LifecycleObserver Neden Kullanılmalıdır?


Normal şartlarda bir Activity'nin Lifecycle event'lerini callback metodlarla (onCreate, onStart, onResume, onPause, onStop, onDestroy) takip edebiliyoruz.



  • Ancak karmaşık ve büyük uygulamalarda state'lere göre alınacak aksiyonlar çok fazla olabiliyor. Bu nedenle lifecycle callBack metodları çok fazla kod içermeye başlıyor. Bu da activity veya fragment'lardaki code complexity'nin artmasına neden oluyor.

  • Ayrıca uygulamalar birden çok activity'e sahip olduklarından her activity için lifecycle callBack metodlarının düzgün şekilde tasarlanması ve kodlanması gerekiyor. Bu gibi n adet activity içeren uygulamalarda tüm activity'ler BaseActivity sınıfından türetilir ve lifecycle callBack metodlar bu ortak sınıf üzerinden yönetilir. Bu sürecin bir parçası olarak BaseActivity sınıfı içerisinde state'e göre activity bazlı görev parçalarını çalıştırmak için BaseActivity'nin hangi activity için ayakta olduğunu kod içerisinde tespit etmek gerekir. Ayakta olmayan bir activity'nin ui parçasına erişmeye çalışmak memory leak'lere ve crash'lere neden olabilir.

  • Uygulama'nızın foreground/background geçişlerinde activity veya fragment bağımsız görevler yapmasını istediğinizde de activity veya fragment'ın lifecycle callBack metodlarında kurgunuzun düzgün olması gerekir. Bu da complexity'nin artmasına neden olur.


Bu tarz sorunları yaşamamak ve complexity'yi azaltmak için Lifecycle-Aware Component'lerini kullanabilirsiniz. Böylece lifecycle callBack metodlarını activity sınıflarınızdan arındırabilirsiniz.


Örnek Bir Sernaryo: Uygulama Background Foreground Geçişlerini Yakalamak


Android'de uygulamanın background/foreground geçişlerini yakalamak için uzun süre boyunca custom yöntemler kullanılmaktaydı. Yukarıda bahsettiğimiz gibi her activity'nin onResume() ve onPause() metodunu buna göre tasarlıyorduk.


Ya da bu örnekte olduğu gibi uygulamanın Application sınıfına ActivityLifecycleCallbacks sınıfını implement ederek application sınıfında onActivityStarted() ve onActivityStopped() metodlarının çalışma sayısını bir değişkende tutarak uygulamanın geri plana gittiğini veya ilk defa ön yüze geldiğini custom bir yöntemle aşağıdaki şekilde yakalayabiliyorduk.