Tüm Üyelere ve Ziyaretçilere Forumda İyi Vakit Geçirmelerini Dileriz.
Tüm Paylaşımlarla, İsteklerinizle , Sorularınızla Daima Yanınızdayız.

Android Activity Lifecycle

Konu Sahibi: Morningstar, Kategori: Android Uygulama Geliştirme, 0 Yorum, 391 Okunma
BU KONUYU DEĞERLENDİR
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Görüntüleyenler: 1 Ziyaretçi
Yönetici
Yönetici
*******
348
Mesajlar
347
Konular
0
Rep Puanı
23-02-2020, Saat: 01:27
#1
Bir activity ‘ye sahipsiniz ve başladınız kodlarınızı yazmaya. Sonra dil değişti, ekran yatay hale geldi. Telefon ‘da başka bir uygulama açtınız. Hiç bu işlerin sonucunda neler değişti, Arka planda ne oldu düşündünüz mü ? Hep birlikte gelin düşünelim.
Öncelikle activitylerin yaşam döngüsü aşağıdaki gibi.
[Resim: 1aL1Wm-K_EebgTtHyGaSN0A.png]Activity Lifecycle
Telefonda çalışan herhangi bir uygulama açtınız. Bir activity öncelikle onCreate metodunu çalıştırır. Bizde android yazarken ilk olarak onCreate metodunu yazarız. Nedeni aşağıda. (Her zaman activity ‘lerin içinde onCreate ‘i görürüz. Zorunludur ! )
Sonra onStart ve en son onResume ile ekran açılışı sağlanır. Sonrası ise aşağıda. Gündelik hayatta kullandığımız uygulamalar arka planda bakın neler yapıyor.



Kod:
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

Uygulama açık iken bazı Senaryolar
Uygulama açıldığında

onCreate() –> onStart() –> onResume()

Geri tuşuna basıldığında

onBackPressed() –> onPaused() –> onStop() –> onDestroy()

Home tuşuna basıldığında

onPaused() –> onStop()

Home tuşuna basıp son uygulamalardan açtığımızda veya uygulamamızın ikonuna basarak açtığımızda

onRestart() –> onStart() –> onResume()

Üst bildirim ekranından başka bir uygulama açtığımızda veya ayarları açtığımızda

onPaused() –> onStop()

Başka bir uygulamada isek geri butonuna bastığımızda veya ayarlarda isek geri butonuna bastığımızda

onRestart() –> onStart() –> onResume()

Ekranda herhangi bir dialog ekranı açıldığında

onPause()

Dialog ekranını kapattığımızda veya geri tuşuna bastığımızda

onResume()

Telefon ekranı kapandığında

onPaused() –> onStop()

Telefon ekranı tekrar açıldığında

onRestart() –> onStart() –> onResume()

Telefonu döndürdüğümüzde (yatay )

onPause() –> onStop() –> onSaveInstance() –> onDestroy()

Telefonu dikey ‘e tekrar döndürürsek

onCreate() –> onStart() –> onRestoreIntanceState() –> onResume()

onCreate() Methodu

Activity ilk açıldığında gerçekleşen olayları içinde barındırır. Her activity ‘de olan metod. Ayrıca uygulama başladığında çalışır ve yapılan işlemlerde tekrardan çalışmasına gerek yoktur.

onCreate() methodu geliştiricinin oluşturduğu viewmodelleri ,nesneleri ya da veri alışverişini sağlayabilir ve bu işlemleri yapmak için [i]savedInstanceState [/i]parametresinden yardım alır.Diğer bir yardımcısı ise setContentView() elemanıdır.Bu eleman kullanıcı arayüzünde gösterilmesi istenen xml tasarımı göstermesini sağlar.

onStart() Methodu

Activity başlatıldığında onStart() metodu çok hızlı bir biçimde devreye girer. Bu metod devreye girdiğinde uygulama kullanıcıya görünür hale gelir.

Activity start durumuna geçtiğinde, yaşam döngüsüne bağlı olan yaşam döngüsüne duyarlı tüm bileşenlerde ON_START olayını alıyor.

onStart() metodu çok hızlı bir şekilde tamamlanıyor. Activity start durumuna yerleşik olarak kalmıyor. Bu metod ‘tan sonra onResume() çalışıyor.

onResume() Methodu

Activity onResume() metoduna girdiğinde uygulama ön plana gelir ve sistem onResume() çağrıısında kalır. Bu metod kullanıcıyla etkileşime girildiği durumdur. Bu metod telefon çağrısı alana kadar ya da başka bir etkinliğe girene kadar kısaca herhangi bir işlem yapana kadar kalmaktadır.

Etkinlik onResume metoduna geçtiğinde yaşam döngüsüne bağlı tüm bileşenler ‘de ON_RESUME olayını alır.

Bir kesinti ‘de bu metod ‘tan sonra onPause() metodu devreye girer.

onPause() Methodu

Sistem uygulamanın bir nevi kapandığını bildirdiği zaman çalışır.Yani uygulamamız arkaplana atıldığı zaman ,arama geldiği zaman ya da başka bir uygulama açıldığı zaman bu method çalışır.Bunun için birkaç neden olarak şunlar vardır :
  • onResume() methodunda açıklandığı gibi uygulama kesintiye girdiğinde oluşur.Bu en yaygın durumdur.

  • Android 7.0(API 24) ve yukarısı için çoklu penceresi özelliği aktif olabilmesi için.sistem bir uygulamayı ön planda tutarak diğer ugulamaları kesintiye uğratır.

  • uygulama üzerinde telefondan kaynaklı bir uyarı penceresi vb. dialog açıldığında uygulamamız çalışır gibi görünse de aslında duraklatılmış ve kesintiye uğramıştır.
Yani onPause() methodunu kulllanmaktaki amacımız uygulamamız çalışırken herhangi bir yerde duraklatıldığı zaman gerçekleştirilmesi istenen işlemlerimizi yaparız.

Lakin sistem arkaplandan silindiğinde yda başka bir durumda kapandığında onStop() methodu devreye girer.

onStop() Methodu

Kullanıcı uygulamadan çıkış yaptığında buradaki kodlar çalışmaktadır.Herhangi bir işlemi uygulama kapatırken sonlardırmak istersek bu işlemi burada yapabiliriz.Bu methodun kullanılması CPU da gereksiz işlemlerin kapatılmasına da yardım olarak uygulamamız kullanıcıya çok farkettirmese de kullanıcı dostu olur .

Eğer kullanıcı uygulama ile etkileşimi komple bitti ise onDestory() methodu çalışır.

onDestory() methodu

Bu method kullanıcı ile bağlantısı kalmayan uygulamanın arkaplanı temizlemek için kullanılır.

Peki bunlardan haberdar olmamız neden önemli ?

Eğer performanslı bir ürün ortaya koyacak ve ürünün sağlıklı çalışmasını istiyorsak ciddi mana da yardım olacaktır. Bu gibi durumlara birkaç örnek vermek gerekirse şunları diyebiliriz :
  • Uygulamamız çalışırken telefona arama geldiğinde ya da uygulamamız üzerine yeni bir uygulama açıldığında bizim uygulama düzgün çalışmaması veya performans kaybı yaşanması

  • Telefonların Ram belleğinde yer tutması ve bunun sonucunda yazılımsal sorunlar ortaya çıkması

  • Uygulama içinde belli birkaç işlem yapıp kullanıcı çıkış yaptığında tekrar girmek istemesi durumda son bıraktığı yerde durmaması

  • Son olarak kullanıcı telefonu yatay ya da dikey konuma çevirdiğinde kaydettiği,yaptığı işlemleri kaybetmesi
Hadi Hep beraber aşağıdaki kodu çalıştıralım.. Sonucu yukarıdaki gibi Uygulama Açık iken gerçekleşen senaryolarla benzer olacaktır.

Aşağıdaki kod ‘ta farklı bir kaç metod daha vardır. Bunlar ise sürekli kullandığımız menu metodları ‘dır. Activity yaşam döngüsündeki sıralardan sonra genellikle devreye giriyorlar. Örneğin bir menü işleminin çalışması aşağıdaki state ‘lerde gerçekleşir.

onResume –> onCreateOptionsMenu –> onPrepareOptionsMenu
–> onUserInteraction ise herhangi bir işlem yaptığınızda devreye giren metod ‘tur.




Kod:
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        "onCreateBeforeContentView".logError()

        setContentView(R.layout.activity_main)

        "onCreateAfterContentView".logError()


    }

    override fun onStart() {
        super.onStart()

        "onStart".logError()
    }

    override fun onRestart() {
        super.onRestart()

        "onRestart".logError()
    }

    override fun onResume() {
        super.onResume()

        "onResume".logError()
    }

    override fun onPause() {
        super.onPause()

        "onPause".logError()
    }

    override fun onDestroy() {
        super.onDestroy()

        "onDestroy".logError()
    }

    override fun onStop() {
        super.onStop()

        "onStop".logError()
    }

    override fun onContentChanged() {
        super.onContentChanged()

        "onContentChanged".logError()
    }

    override fun onBackPressed() {
        super.onBackPressed()

        "onBackPressed".logError()
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        "onOptionsItemSelected".logError()

        return super.onOptionsItemSelected(item)
    }

    override fun onOptionsMenuClosed(menu: Menu?) {
        super.onOptionsMenuClosed(menu)

        "onOptionsMenuClosed".logError()
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        "onCreateOptionsMenu".logError()

        return super.onCreateOptionsMenu(menu)
    }

    override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
        "onPrepareOptionsMenu".logError()

        return super.onPrepareOptionsMenu(menu)
    }

    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)

        "onRestoreInstanceState".logError()
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)

        "onSaveInstanceState".logError()
    }

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)

        "onConfigurationChanged".logError()
    }

    override fun startActivityForResult(intent: Intent?, requestCode: Int) {
        super.startActivityForResult(intent, requestCode)

        "startActivityForResult".logError()
    }

    override fun onUserInteraction() {
        super.onUserInteraction()

        "onUserInteraction".logError()
    }

}
[Resim: imza.png]


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Android Studio Button, Sms ve Android Manifest Morningstar 0 203 23-02-2020, Saat: 01:20
Son Yorum: Morningstar
Android, Android Studio ve Eclipse Kurulum Morningstar 0 223 23-02-2020, Saat: 01:18
Son Yorum: Morningstar


[-]
Etiket
activity lifecycle android

Hızlı Menü: