Android Programlama Ders 21: Activity LifeCycle – Etkileşimin (Activity) durumları

In Mobil, Pratik by Victor CuiumjuLeave a Comment

Android Programlama Ders 21’de Etkileşimin davranışları ve durumları öğreneceğiz.

Android uygulamayı çalıştırdığımız zaman etkileşimleri (Activity) oluşturuyoruz, kapatıyoruz ve  küçültüyoruz (gizliyoruz), bu eylemleri sürekli tekrarlıyoruz. Etkileşim bu hareketleri işleterek sistem kaynaklarını daha verimli kullanılıyor. Daha ayrıntılı bilgiyi buradan okuyabilirsiniz.

Etkileşim üç durumda olabilir:

Resumed – Etkileşim ekranda görülür ve kullanıcı onunla çalışabilir. Bu durum bazen Running (Çalışıyor) olarak anılıyor.

Paused – Etkileşim odak değil, kullanıcı onunla çalışmıyor ancak onu görebiliyor.

Stopped – Durmuş etkileşim. Odaklı değil ve kullanıcı onunla bağlantı kuramaz.

Etkileşimin durumu değiştiği zaman sistem farklı metotları çalıştırır. Bu metotları kodla doldurabiliriz. Şematik olarak aşağıdaki gibi gösterebiliriz:

StatesSchema

Etkileşimi çalıştırdığında sistemin çağırdığı metotları aşağıda açıklayalım:

onCreate() – İlk etkileşim oluştururken çağrılıyor.

onStart() – Etkileşimi kullanıcıya göstermeden önce çağrılır.

onResume() – Etkileşimi aktif haline getirmeden önce çağrılır.

 onPause() – İlerideki (sonraki) etkileşimi göstermeden önce çağrılır.

onStop() – Etkileşim kullanıcıya görülmez hale geldiği zaman çağrılır.

On Destroy() – Etkileşim yok olacağı zaman önce çağrılır.

Bu metotlar bir durum değişimine neden olmuyorlar. Aksine etkileşimin durumu değişince metotların çağrılmasını tetikliyor. Böylece bir değişkenlik bildirmek için ve buna göre tepki verebiliriz. Hangi sırayla metotların çağrılması gerektiğini pratikte görelim.

Yeni bir proje oluşturalım:

  • Project name: P0020_OneActivityState
  • Build Target: Android 4.2
  • Application name: OneActivityState
  • Package name: tr.androidApp.OneActivityState
  • Create Activity: MainActivity

Layout’u değiştirmiyoruz, şu anda bizim için önemli değil. MainActivity.java’yı açıyoruz, genellikle olduğu gibi varsayılan kodu görüyoruz.

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}

Şemadan onCreate metodu görüyoruz. Tekrarlıyayım; bu metot etkileşimi (Activity) oluşturmuyor. Etkileşimin oluşturması sistemin işidir. Sistem bize onCreate metoduna kendi kodumuzu yazma imkanı sunuyor. Bu imkanı kullanalım ve R.layout.main ekranı gösterelim. Şemadan kalan metotları ekleyelim ve metotları kullanarak bildirime (loglara) yazı yazdıralım.

 

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

final String TAG = “States”;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(TAG, “MainActivity: onCreate()”);
}

@Override
protected void onStart() {
super.onStart();
Log.d(TAG, “MainActivity: onStart()”);
}

@Override
protected void onResume() {
super.onResume();
Log.d(TAG, “MainActivity: onResume()”);
}

@Override
protected void onPause() {
super.onPause();
Log.d(TAG, “MainActivity: onPause()”);
}

@Override
protected void onStop() {
super.onStop();
Log.d(TAG, “MainActivity: onStop()”);
}

@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, “MainActivity: onDestroy()”);
}
}

 

Şimdi metotları çağırdığı zaman bildirimlerde (loglarda) bunu görebiliriz. Filtreyi States etiketine ayarlayalım. Bunun nasıl yapıldığını 10 derste görebilirsiniz.

LogStates

 

Kaydedelim ve uygulamayı çalıştıralım. Çalıştırdıktan sonra bildirimlere bakalım:

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

Etkileşim iki durumu (Stopped, Paused) değiştirdi ve şuanda üçüncü durumda – Resumed. Yani etkileşim oluştu (onCreate), sonra görüntüledi (onStart) ve kullanıcıyla etkileşime sunuldu (onResume).

Şimdi emülatorde Back (Geri) düğmesine basalım. Etkileşim kapandı. Bildirime bakalım:

MainActivity: onPause()
MainActivity: onStop()
MainActivity: onDestroy()

Etkileşim geri oluşturma gerçekleştiriyor. İlk odaklamayı (onPause) kaybediyor, sonra ekrandan kayboluyor (onStop) ve sonraki adımda yok oluyor (onDestroy).

Ekranın pozisyonu değiştirmesi

Ekranın pozisyonu değişiklik olduğunda, etkileşim nasıl davranacağına bakalım. Uygulamayı çalıştıralım ve emülatörde CTRL+F12 basalım. Ekranın pozisyonu değişti. Şimdi bildirimlere bakalım:

MainActivity: onPause()
MainActivity: onStop()
MainActivity: onDestroy()
MainActivity: onCreate()
MainActivity: onStart()
MainActivity: onResume()

Etkileşim tamamen yıkılıyor (yok oluyor) ve yeniden oluşturuyor. Bunu yaparken genellikle kaydetme ve geri yükleme prosedürleri gerçekleşiyor. Amacı veri kaybını önlemek ve uygulamanın şeklini korumak. Bunu nasıl yapıldığını sonraki derslerde ayrıntılı anlatacağım.

Ayrıca onRestart metod mevcuttur. Eğer etkileşim sıfırdan oluşturulmuyorsa ve Stopped durumundan çağrılıyorsa, o zaman onRestart metodu onStart metodundan önce çağrılır.

Konuyu daha iyi anlamak için dersin başında verdiğim referansları okumayı tavsiye ederim.

Ders Sonu Notları:

Bu derste etkileşimin hayat döngüsünü ve durumların nasıl oluştuğunu öğrendik. Sonraki derste iki etkileşimi kullandığımız zaman durumun değişikliğinin nasıl olduğunu öğreneceğiz.