Android Activity Life Cycle (Activity Yaşam Döngüsü)

Aysel Aydin
5 min readMar 17, 2020

Merhaba arkadaşlar, bu yazımızda Android geliştiricilerin bilmesi gereken en önemli konulardan biri olan Activity’lerin yaşam döngüsünü(Activity Lifecycle) ele alıyor olacağız. Activity’ler uygulamalarımızda kullanıcının etkileşime geçebileceği arayüzlerdir. Activity Lifecycle, kullanıcının uygulama içindeki davranışlarına göre kendiliğinden tetiklenen metotlar bütünüdür. Bu yaşam döngüsüne hakim olmayan bir developer’ın zaman zaman kullanıcının davranışlarına göre uygulamalarında crash durumları yaşamaları kaçınılmazdır. Bu yüzden activity yaşam döngüsünü iyi bilmek olası durumları doğru bir şekilde yönetmeyi sağlayacaktır.

Genel olarak şemamız bu şekilde.

  • Activity oluşturulurken
  • Ekran dikeyden yataya ya da yataydan dikeye geçişlerde
  • Telefonun ekranı kilitlendiğinde ve ardından açıldığında
  • Geri tuşuna tıklanıldığında
  • Uygulama ayağa kalktıktan sonra uygulama arka plana alınıp telefonun dil değişikliği yapılıp uygulama tekrar açıldığında
  • Uygulama arka plana alındığında
  • Arka plana alınmış bir uygulama tekrar ön plana alındığında
  • Diyalog penceresi çıktığında
  • Diyalog penceresi kapatıldığında

Peki bu metotlar bu tür durumlarda hangi sırayla çalışır? Öncelikle metotlarımızı sırayla ele alıp ardından olası durumlarımızı bir bir ele alıp metotlarımızın çalışma sıralarını inceleyelim.

onCreate()
Bir activity başlatıldığında arka planda devreye giren ilk metottur. Uygulamamız açıldığı zaman gerçekleşmesini istediğimiz yaşam döngüsü içerisinde yalnızda bir kere gerçekleşmesi gereken eylemleri (değişkenleri tanımlamak vs.) onCreate() metodunda yazarız. Bu işlemler uygulama Destroy edilmediği sürece onCreate() metodu tekrar çalışmayacağı için sadece bir kez çalışır.

onCreate() metodu Bundle tipinde bir nesne olan ve activity’nin kaydedilen son durumunu içeren savedInstanceState parametresini alır. Bu metot içerisinde çağrılan setContentView() de xml dosyası aracılığıyla activity view’inin çizilmesini sağlar.

onStart()
onCreate() metodundan sonra çalışan metottur. Arka planda bekleyen uygulamanın ekrana yeniden getirilmesiyle de çalışır bu metot. Bu metot ile Activity’nin arayüzü kullanıcıya görünür hale gelir.

onRestoreInstanceState()
Bu metod activity herhangi bir şekilde yeniden başlamak zorunda kalırsa ve daha önce onSaveInstanceState(Bundle) metodu içerisinde kaydedilen durumdan tekrar başlatılmak istenirse onStart() sonrası çağrılan metottur. Önceki duruma parametre olarak aldığı bundle’la erişebilmemizi sağlar. Eğer herhangi bir değer kaydedilmemişse(onSaveInstanceState) bu parametre onCreate metodundaki bundle’da olduğu gibi null değerini döndürür.

onResume()
onRestoreInstanceState(), onRestart() veya onPause() metotlarından sonra çağrılır. Bu metot içerisine uygulama ön plandayken gerçekleştirmek istediğimiz eylemlerin kodlarını yazabiliriz. Animasyon veya video oynatma, cihaz özelliklerini(mikrofon, kamera vs) kullanma gibi işlevleri başlatmak için bu metodu kullanabiliriz. Örneği ekranımızda sürekli dönen bir video olarak, bu video uygulama geri plana atılınca ya da yukarıda bahsettiğimiz durumlar karşısında geri durdurulmalı, activity tekrar ayağa kalktığında oynatılmalıdır. Yani video onResume() metodunda başlatılıp onPause() ve onStop() metotlarında duraklatılmalıdır.

onPause()
Activity arka plana alındığında, arama geldiğinde, başka bir uygulama açıldığında ya da uygulama üzerinde telefondan kaynaklı bir uyarı penceresi vb. gibi diyalog açıldığında uygulamamız duraklatılıp kesintiye uğratıldığında onPause() metodu tetiklenir. Buradan da anlaşılacağı gibi onPause() metodunu uygulamamız çalışırken herhangi bir yerde duraklatıldığı zaman gerçekleştirilmesini istediğimiz işlemlerimizi yaparız.

onStop()
onPause() metodundan sonra çalışır. Uygulama artık kullanıcı tarafından görünmüyorsa durdurulma aşamasına girmiş demektir. Yeni bir activity’nin tam ekran açılması ya da mevcuttaki activity’nin çalışmayı bitirmesi bu metodun çağrılmasına neden olur. Herhangi bir işlemi uygulama kapanırken sonlandırmak istersek bu işlemleri (animasyonları durdurmak, detaylı (fine-grained) konum takibinden daha az detaylı (coarse-grained) konum takibine geçmek gibi)) burada yapabiliriz. Bellek kullanımını daha verimli hale getirmek için kullanıcının ihtiyaç duymadığı kaynakları onStop() metodunda kapatabiliriz. Bu şekilde CPU da yormamış oluruz.

onRestart()
onStop()’tan sonra activity kullanıcı tarafından yeniden ön plana getirildiğinde çağrılır. Bu metodu onStart() ve onResume() metotları devam eder.

onDestroy()
Activity yok edilmeden önce çağrılan metottur. Uygulama içerisinde finis() metodunun çağrılmasıyla ya da activity uzun süre etkin duruma gelmeyip sistem tarafından otomatik kapatıldığı durumlarda bu metot çağrılır. Uygulamanın hangi sebeble sonlandığını isFinishing metodunu kullanarak öğrenebiliriz.

onSaveInstanceState(Bundle)
Activity yok edilmeden hemen önce çağrılan metottur. Mevcut içerik bu metot aracılığıyla saklanır ve activity tekrar başladığında kaydedilen içeriğe onCreate() veya onRestoreInstanceState() metodlarıyla ulaşılır.

Not: Android Studio’nun güncel versiyonlarında id değerine sahip değişkenlerde InstanceState metotlarına ihtiyaç duymadan verilerin saklanabilmesi sağlanmıştır.

onCreateOptionsMenu()
Activity’nin standart seçenekler menüsünü oluştururken çağrılır. Seçenekler menüsü ilk görüntülendiğinde sadece bir kez çağrılır. Menü her kullanıldığında güncelle işlemi için onPrepareOptionsMenu kullanılmalıdır.

onPrepareOptionsMenu()
Activity’nin standart seçenekler menüsü gösterilmeden hemen önce ve menü her oluşturulduğunda çağrılır. Menü öğelerini etkinleştirmek, devre dışı bırakmak veya içeriği dinamik olarak değiştirmek için bu yöntem kullanılabilir.

onUserInteraction()
Kullanıcı activity içinde herhangi bir yere dokunduğunda veya cihaz üzerinde herhangi bir tuşa bastığında çağrılır. onUserLeaveHint() metodu ile birlikte, durum çubuğu bildirimlerini akıllıca yönetmelerine yardımcı olmayı amaçlar.

onUserLeaveHint()
Kullanıcı seçimi sonucu olarak activity arka plana alınıyorsa çağrılır. Eğer activity sistem tarafından geri plana alınırsa bu metot çağrılmaz. onPause() metodundan hemen önce çağrılır. Genel olarak onUserLeaveHint() ve onUserInteraction() metotlarının amacı activity’lerin durum çubuğu bildirimlerini akıllıca yönetmelerine yardım etmektir.

onActivityResult()
Başlatılan bir etkinlik sona erdiğinde çağrılan metottur. Activity yeniden başlatıldığında onResume() metodundan hemen önce bu metot çağrılır. Activity eğer bir requestCode ile başlatıldıysa ve geri dönüş değeri olarak resultCode atanmışsa, bu metodun içinde bu resultCode’un değeri alınabilir.

onAttachFragment()
Activity’e bir fragment eklendiğinde çağrılır. Fragment’in onCreate() metodundan önce çağrılır.

onConfigurationChanged()
Activity çalışırken cihaz yapılandırması değiştiğinde sistem tarafından çağrılır. Manifest dosyası üzerinden bir Activity tanımlaması yapılırken, configChanges özelliğinde sistem tarafından değiştirilen ayarlardan haberdar olmak istediklerimizi yazarsak bu durumların gerçekleşmesi durumunda Activity’imiz bilgilendirilecektir. Seçilmeyen bir ayar değiştiğinde sistem durur ve activity yeniden başlatılır.

onBackPressed()
Kullanıcının geri tuşuna basmasıyla çağrılan metottur. O an açık olan activity’i sonlandırma işlevi görür fakat farklı işlemlerde yapılabilir(Uyarı mesajı göstermek ya da kullanıcıya activity’den çıkmadan önce bir reklam göstermek gibi)

Metotlarımızı öğrendiğimize göre şimdi olası durumlarda metotların çalışma sıralarına bakalım.

Activity oluşturulurken

Ekran dikeyden yataya ya da yataydan dikeye geçişlerde

Telefonun ekranı kilitlendiğinde

Telefonun ekran kilidi tekrar açıldığında

Geri tuşuna tıklanıldığında

Uygulama ayağa kalktıktan sonra uygulama arka plana alınıp telefonun dil değişikliği yapılıp uygulama tekrar açıldığında

Uygulama arka plana alındığında

Arka plana alınmış bir uygulama tekrar ön plana alındığında

Evet arkadaşlar Android Activity Yaşam Döngüsünün işleyişini bu şekilde tamamlamış olduk. Umarım hepiniz için faydalı olmuştur. Bir sonraki dersimizde görüşmek dileğiyle.. :)

--

--

Aysel Aydin
Aysel Aydin

Written by Aysel Aydin

Master Expert AI & ML Engineer @Turkcell

No responses yet