Understand The Lifescycle Callbacks - Yaşam Döngüsü Geri Çağrılarını Anlama
Bir Activity'nin yaşam döngüsü boyunca, sistem bir piramide benzeyen bir dizi yaşam döngüsü metodu çağırır. Diğer bir deyişle, activity yaşam döngüsünün her aşamasında piramit üzerinde ayrı bir adıma sahiptir. Sistem yeni bir Activity örneği oluşturduğunda, her callback metodu activity durumunu bir adım yukarı doğru taşır. Piramidin tepesi activity'nin en önde çalıştığı ve kullanıcının onunla meşgul olduğu noktadır.
Kullanıcı Activity'den ayrılmaya başladığında, sistem activity'yi bitirmek için tekrardan piramidin altına taşıyacak olan diğer metodları çağırır. Bazı durumlarda, activity kısmen taşınacak ve bekleyecektir (örneğin kullanıcı başka bir uygulamaya geçtiğinde), activity bu noktadan tekrar üste gelebilir ve kullanıcı kaldığı yerden devam edebilir.
Aslında yazdığınız uygulamanın ne kadar karışık olduğuna bağlı olarak bütün yaşam döngüsü metodlarını implement etmenize gerek olmayacaktır. Ancak, Her bir metodu anlamanız ve uygulamanızın kullanıcıların tam olarak beklediği biçimde çalışacağından emin olarak implement edebilmeniz çok önemlidir.
Activity için yaşam döngüsü metodlarını implement etme muhtemelen bir çok yönden uygulamanızın iyi bir davranış sergilemesini kesinleştirecektir. Bunları şöyle sıralayabiliriz:
Kullanıcı Activity'den ayrılmaya başladığında, sistem activity'yi bitirmek için tekrardan piramidin altına taşıyacak olan diğer metodları çağırır. Bazı durumlarda, activity kısmen taşınacak ve bekleyecektir (örneğin kullanıcı başka bir uygulamaya geçtiğinde), activity bu noktadan tekrar üste gelebilir ve kullanıcı kaldığı yerden devam edebilir.
Aslında yazdığınız uygulamanın ne kadar karışık olduğuna bağlı olarak bütün yaşam döngüsü metodlarını implement etmenize gerek olmayacaktır. Ancak, Her bir metodu anlamanız ve uygulamanızın kullanıcıların tam olarak beklediği biçimde çalışacağından emin olarak implement edebilmeniz çok önemlidir.
Activity için yaşam döngüsü metodlarını implement etme muhtemelen bir çok yönden uygulamanızın iyi bir davranış sergilemesini kesinleştirecektir. Bunları şöyle sıralayabiliriz:
- Kullanıcı uygulamanızı kullanırken bir telefon araması aldığında veya başka bir uygulamaya geçtiğinde uygulamanız çökmez.
- Kullanıcı uygulamanızı kullanmayı bıraktığında uygulama sistem kaynaklarını tüketmeye devam etmez.
- Kullanıcı uygulamanızı bırakıp bir süre sonra tekrar uygulamanıza devam ettiğinde yaptığı işlemleri kaybetmez.
- Ekran yönü değiştiğinde kullanıcı uygulamanızda yaptığı değişiklikleri kaybetmez veya uygulamanız çökmez.
Şekil 1 de gösterilen farklı durumlar arasındaki activity geçişlerinde bir çok durum vardır. Ancaki bu durumlardan 3 tanesi statik olabilir. Yani activity aynı zamanda sadece bu üç durumdan birinde bulunabilir:
Devam Eden (Resumed)
Devam Eden (Resumed)
- Bu durumda activity en öndedir ve kullanıcı onunla meşguldür.
- Bu durumda activity başka bir activity tarafından gizlenmiştir - Önde olan diğer activity yarı saydamdır veya bütün ekranı kaplamaz. Duraklatılmış aktivity herhangi bir kullanıcı girişi almaz veya herhangi bir kod çalıştıramaz
- Bu durumda activity tamamen saklanmıştır ve kullanıcıya görünmez. Arka planda tutulur. Activity durdurulmuşken, activity instansları ve üye değişkenler gibi activity'ye ait olan tüm durum bilgileri tutulur. Fakat activity her hangi bir kod yürütemez.
Diğer durumlar (Oluşturma ve Başlatma) geçicidir ve sistem bu durumlardan çok çabuk yaşam döngüsü geri çağrı (lifecycle callback) metodunu çağırarak diğer durumlara geçer. Yani, onCreate() sistem çağrısından sonra, hemen onStart() çağrılır ve onResume() ile devam edilir.
Bu anlatılanlar bir activity'nin temel yaşam döngüsüdür. Şimdi bazı özel yaam döngüsü davranışlarını inceleyelim.
Bu anlatılanlar bir activity'nin temel yaşam döngüsüdür. Şimdi bazı özel yaam döngüsü davranışlarını inceleyelim.
Specify Your App's Launcher Activity - Uygulamanın Başlatma Activity'sini Belirleme
Kullanıcı ana ekrandan uygulamanın ikonunu seçtiğinde, launcher (veya main) activity olarak belirlediğiniz Activity için onCreate() metodunu çağırır. Bu activity kullanıcı arayüzünün ana giriş noktası olarak hizmet eder.
Android manifest dosyasında hangi activity'yi ana giriş ekranı olarak tanımlamak istediğinizi belirleyebilirsiniz. AndroidManifest.xml dosyası projenin köküdür.
Uygulamanızda bulunan ana activity manifest dosyasında LAUNCHER kategorisini ve MAIN action'ını içeren <intent-filter> ile birlikte bildirilmelidir.
Örneğin:
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Not: SDK araçları ile yeni bir android projesi oluşturduğunuzda, varsayılan proje dosyaları filtreli bir manifest içinde bildirilmiş bir Activity sınıfını zaten içerir.
Activity'lerinizden herhangi biri için MAIN action veya LAUNCHER kategorisi bildirilmediğinde, uygulama ikonu ana ekranda belirmez.
Create a New Instance - Yeni Bir Instans Oluşturmak
Çoğu uygulama kullanıcının farklı action'ları başlatabilmesine olanak veren bir çok activity içerir. Bir activity kullanıcı uygulama ikonuna tıkladığında yaratılan main activity veya kullanıcının bir action'ınına cevap olarak oluşturulmuş olan farklı bir activity olsun, sistem onCreate() metodunu çağırarak yeni bir Activity instansı oluşturur.
Activity'nin bütün yaşamı boyunca bir kez olması gereken tamel uygulama başlangıç mantığının gerçekleştirilmesi için onCreate() metodu implement edilmelidir. Örneğin, onCreate() metod immplementasyonu kullanıcı arayüzünü ve mümkün olan bütün sınıf kapsamlı değişkenleri tanımlamalıdır.
Mesela, aşağıda verilen onCreate() metodu örneği kullanıcı arayüzü (XML Layout dosyasında belirlenen), tanımlanan üye değişkenler ve kullanıcı arayüzü konfigürasyonları gibi activity için kullanılan temel ayarları gerçekleştirir.
Activity'nin bütün yaşamı boyunca bir kez olması gereken tamel uygulama başlangıç mantığının gerçekleştirilmesi için onCreate() metodu implement edilmelidir. Örneğin, onCreate() metod immplementasyonu kullanıcı arayüzünü ve mümkün olan bütün sınıf kapsamlı değişkenleri tanımlamalıdır.
Mesela, aşağıda verilen onCreate() metodu örneği kullanıcı arayüzü (XML Layout dosyasında belirlenen), tanımlanan üye değişkenler ve kullanıcı arayüzü konfigürasyonları gibi activity için kullanılan temel ayarları gerçekleştirir.
TextView mTextView; // Member variable for text view in the layout @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the user interface layout for this Activity // The layout file is defined in the project res/layout/main_activity.xml file setContentView(R.layout.main_activity); // Initialize member TextView so we can manipulate it later mTextView = (TextView) findViewById(R.id.text_message); // Make sure we're running on Honeycomb or higher to use ActionBar APIs if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { // For the main activity, make sure the app icon in the action bar // does not behave as a button ActionBar actionBar = getActionBar(); actionBar.setHomeButtonEnabled(false); } }
onCreate() çalışmasını sonlandırdığında, sistem arkası arkasına hemen onStart() ve onResume() metodlarını çağırır. Activity asla, oluşturulmuş(Created) veya başlatılmış(Started) durumunda kalmaz. Teknik olarak onStart() çağrıldığında activity kullanıcıya görünür olur, fakat ardından onResume() hemen başlar ve kullanıcıyı yönlendiren veya ekranı kapatan telefon çağrısı gibi durumu değiştiren bir olay meydana gelinceye kadar activity Resume durumunda kalır.
Destroy the Activity - Activity'yi Yok Etme
Activity birinci yaşam sürecinde yani onCreate() durumunda iken, onun en son callbak'i onDestroy() durumudur. Sistem, activity instansı sistem belleğinden tamamen kaldırılıp bitiş sinyali activity tarafından gönderildiğinde bu metod çağrılır.
Çoğu uygulama bu metodu implement etmeye gerek duymaz çünkü yerel sınıf referansları activity ile birlikte yokedilir ve onPause() ve onStop() durumunda en fazla temizliği yapmalıdır. Ancak, activity arksında oluşturma esnasında başlatılmış geri plan thread'leri varsa bunlar onDestroy() durumunda sonlandırılmalıdır.
@Override public void onDestroy() { super.onDestroy(); // Always call the superclass // Stop method tracing that the activity started during onCreate() android.os.Debug.stopMethodTracing(); }
Not: Sadece bir durum haricinde sistem onPause() ve onStop() çağrıldıktan sonra onDestroy()'u çağırır. Bu durum onCreate() ile finish()'i çağırmanızdır. Başka bir activity'yi çalıştırmak için activity karar verici gibi davrandığı bazı durumlarda, activity'yi bitirmek için onCreate() içinden finish() metodunu çağırabilirsiniz. Bu durumda, sistem doğruca diğer yaşam döngüsü metodlarını çağırmadan onDestroy() metodunu çağırır.
Hiç yorum yok:
Yorum Gönder