Android Programlama Ders 23: Task nedir? Ve nasıl oluşuyor?

In Mobil, Pratik by Victor CuiumjuLeave a Comment

Android programlama öğrenmeye devam ediyoruz. Bu derste Task (görev) nedir ve nasıl oluşturulur konusuna değineceğiz. Sonra Activity (etkileşim) Paused durumundan bahsedeceğiz.

Derslerimizde Activity’nin görünmediği zaman nerede sakladığınından bahsedeceğiz. Back (Geri) butonuna basıldığı zaman nereden aldığını öğreneceğiz. Task hakkında İngilizce kaynağı bu bağlantıda bulabilirsiniz.

Task.

Uygulamada birden fazla Activity (Etkileşim) olabileceğini biliyoruz. Ve etkileşimin Intent ve Intent Filter’si kullanarak başka etkileşimi çağırmasının mümkün olduğunu öğrendik. Şimdi Task hakkında konuşalım. Task nedir daha iyi anlamak için web tarayıcının çalışmasını örnek olarak alalım. Task sekme, etkileşim pencere ve link Intent varsayalım. İstediğiniz zaman Back (Geri) butona basıp geri dönebilirsiniz ama ileriye dönemezsiniz çünkü ilerdeki sayfa siliniyor. İleriye dönmek için yine linke (Intent) basmamız gerekecek. Eğer yeni bir şey açmak istiyorsanız yeni sekme açması gerekiyor. Ve sekmenin içinde linkleri kullanarak yeni pencereleri açabilirsiniz. Sonunda birkaç tane sekme oluşuyor. Bir çalıştığınız sekme önde (aktif) başkaları arka planda (pasifte) kalıyor.

Sonuçta web tarayıcının ve Android arasındaki benzerliği şöyle gösterebiliriz:

Tarayıcı – Android

Sekme – Task (Görev)

Pencere – Etkileşim (Activity)

Link – Intent

 

Task – Etkileşimlerin grubudur. Kullanıcı görevi (task) kullanarak belirli bir işlemi gerçekleşiyor. Görevi oluşturmak için genellikle başlangıç ekran – Ana ekran (Home).

Ana (Home) ekranda bulunduğu zaman uygulamalar listesinden veya kısa yoldan uygulamayı çalıştırabilirsiniz. Uygulamayı çalıştırdığınız zaman yeni Task oluşuyor ve MAIN (Ana) etkileşim (Activity) bu göreve kök (Root) olarak yerleştiriliyor ve Task ön plana çıkıyor. Task  sistemde arka planda olduğunda sistem Task’ı ön plana çıkartıyor. Yani görevi yeniden oluşturmuyor.

Activity_A  Activity_B çağırdığı zaman Activity_B Task’ta üst pozisyonu alır ve odaklanır. Activity_A Stopped durumunda Task’ta bulunuyor (Gözükmüyor ve odaklı değil). İlerde kullanıcı Back (Geri) butona bastığında Activity_B Task’tan siliniyor ve Activity_A üst pozisyona geçiyor.

Etkileşimler (Activity) hangi sırayla açılmışsa o sırayla Task’ta (Görevde) bulunur. Task’ta bulunduğu etkileşim grubu back stack isimlendiriyorlar. Back stack’ı kısaltalım stack (yığın) isimlendirelim.

Şema:

diagram_backstack[1]

 

Şemanın üst kısmında kullanıcının gördüğü pencereyi, alt kısmında Task’ın içeriğini görüyoruz. Yeni etkileşim açıldığı zaman etkileşim yığının en üstüne yerleştiriyor. Back (Geri) butona bastığında üst etkileşim siliniyor ve önceki etkileşim görüntülüyor.

Task’ta birkaç tane etkileşim olduğunu sayalım. Home butona bastığı zaman Task ve etkileşimler kaldırılmıyor. Task sadece arka plana geçiyor ve her zaman yeniden çağrılabilir.

Eğer aktif Task’ta birkaç defa Back butona basarsanız yığın (Stack) sonunda boş kalır ve kullanıcı Ana (Home) ekrana dönecektir.

Bu bilgileri bildikten sonra geçen dersten kalan soruya cevap verebiliriz. Soruyu hatırlatayım: neden ikinci aşamada MainActivity ekrandan kaybolduktan sonra bellekteydi ve üçüncü aşamada ikinci etkileşim ActivityTwo ekrandan kaybolduktan sonra yok edilmişti? Neden ikinci aşama istisnaydı? Şimdi neden olduğunu biliyorsunuz. Çünkü ikinci aşamada MainActivity etkileşim yığında kalmış ve ActivityTwo etkileşim yığın üstüne çıkmış ve odaklanmış. Üçüncü ve dördüncü aşamada etkileşimler yığından silindikten sonra Ana (Home) ekranı gördük.

Paused

Şimdi bir önceki dersten projeyi açalım: Project name: P0022_TwoActivityState. İstediğimiz şey etkileşimi paused durumunda yakalamak. Bu durum olduğu zaman etkileşim odaklı değil ve etkileşim kısmen görülebilir. Bu durumu yakalamak için Activity_Two dialog style (Dialog tarzı) ayarlayacağız. Bu etkileşim (Activity_Two) bir pop-up pencere olarak görüntülenecek ve aşağıda kısmen MainActivity etkileşimi görünür olacak. Bu durumda MainActivity etkileşimi Paused (Durduruldu) statüsünde olacak. Uygulayalım.

Bunu yapmak için AndroidManifest.xml dosyada, Application sekmede tr.androidApp.TwoActivityState.MainActivity’ye bir defa basıyor ve sağa tarafta Theme alanına   @android:style/Theme.Dialog kopyalıyoruz.

ThemeDialog

 

Kaydedelim ve çalıştıralım:

MainActivity çıkıyor.

Bildirimler:

MainActivity: onCreate()
MainActivity: onStart()
MainActivity: onResume()

ActivityTwo çağırıyoruz.

TwoActState

Bildirimler:

MainActivity: onPause()
ActivityTwo: onCreate()
ActivityTwo: onStart()
ActivityTwo: onResume()

Görüyoruz ki MainActivity etkileşim için onStop metodu uygulanmamış. Bu demektir ki uygulamamız Stopped durumuna dönmedi ve Paused durumunda bulunuyor.

Back (Geri) butona basıyoruz.

Bildirimler:

ActivityTwo: onPause()
MainActivity: onResume()
ActivityTwo: onStop()
ActivityTwo: onDestroy()

Bildirimler

 

MainActivity etkileşim onResume metodu kullanarak geri döndü, onStart metodu kullanmadı çünkü Stopped değil Paused durumundaydı.

Artık daha kapsamlı bir uygulama oluşturmak için yeterli bilgiye sahibiz. Gelecek derste fazla kilo ölçen bir uygulamayı yazmaya çalışacağız.