Android Activity Sınıfı

Android Activity Sınıfı ile oluşturduğumuz nesneler uygulamamızın içindeki her bir ekranı temsil eder ve çalışma mantığını içinde barındırır. MVC mimarisinden model katmanından gelmektedir.

Android sisteminde Activity’ler, Activity yığınları olarak yönetilirler. Android Activity Sınıfı ile açılma sırasına göre ‘back stack’ dediğimiz bir yığına dizilir. Mesela bir mail uygulamamız olsun, kullanıcı ekrandan bir maile bastığında seçilen maili gösteren yeni bir Activity açılır, bu yeni Activity back stack’e eklenir. Kullanıcı ‘Geri’ tuşuna bastığında Activity sonlanır ve back stack’ten çıkarılır.

Oluşturduğumuz her activity sınıfını manifest dosyasında tanımlamak zorundayız. Tanımlanmadıysa uygulama büyük ihtimalle çalışırken hata verip çökecektir.

Oluşturduğumuz uygulama açılırken kullanıcının karşısına ilk çıkması gereken Activity’i açar, bu Activity ise LAUNCHER Activity olarak da bilinir. Manifest dosyasında bu Activity’nin launcher olduğunu intent-filter ile belirtmemiz gerekir. Bu sayede sistem ilk açılacak Activity’i tanır ve işleme geçer.

Activity sınıfının bir yaşam döngüsü vardır. Bu yaşam döngüsüne “Activity Lifecycle” denir. Activity sınıfı çalışmaya başladığında yaşam döngüsü de doğal olarak başlamış olur.

Activity Yaşam Döngsü
Activity Yaşam Döngsü

Yaşam döngüsünün en başında onCreate() metodu bulunur ilk olarak bu metod çalışır. Projeyi ilk oluşturduğunuzda var olan Activity sınıfının setContentView() metodu yardımıyla tasarım dosyası olan XML dosyası ile ilişkilendirildiğini görürüz. onCreate() metodu içerisinde ilk çalıştırılan metod da budur. Dahası, bu metod çalıştırılınca Activity arayüz görünümü değişeceğinden ikinci olarak da onContentChanged() metodu da çalıştırılır (notifyDataSetChanged(), setContentView(), addContentView() de bu metodu tetikler). Activity başlarken oluşması gereken değişkenleri bu metod içinde tanımlamalıyız.

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

Buradaki @param savedInstanceState değişkeni, Activity tekrar oluşturuluyorsa onSaveInstanceState(Bundle) veya onPause() metodunun içerisinde kaydedilen Activity durumdur.

onCreate() metodundan sonra yaşam döngüsünün diğer basamaklarını oluşturan diğer metodlar bulunur. Teker teker açıklamaya çalışayım.

onStart() metodu, Activity sınıfımız ekranda göründüğünde çalıştırılmaya başlanır. İlk olay, uygulamayı başlattığımızda onCreate() metodunun ardından çalışmaya başlar. İkinci olay, uygulama o an bize görünür değilse (onPause() metodunda), ve ardından uygulamaya geri dönersek onStart() metodu tekrar çalışır.

@Override
    protected void onStart()
   {
        super.onStart();
       Toast.makeText(getApplicationContext(),"onStart() cagirildi", Toast.LENGTH_LONG).show();
    }

onResume() metodu,  onRestart() ya da onPause() metodunun ardından çalıştırılır ve bu metoddan sonra Activity yürümeye başlar. Farklı bir Activity açıldığında ve tekrar aynı Activity’e dönüldüğünde yine bu metod devreye girer.

onPause() metodu, Activity arkaplana alınırken veya başka bir Activity’e geçilirken onPause() metodu çağrılır, uygulama öldürülmez. Activity animasyonları ve kamera kullanımı durdurulur yani pil kullanımının önü kesilir. Mantıken bu metodu Override ederken pili tüketecek hareketlerden de kaçınmamız gerekir. Kullanıcıdan beklenen otomatik hafızaya kaydetme işlemleri de bu metod üzerinden yapılır. Bir taraftan bellekte yer açılırken Activity’nin durumunu da burada kaydedebiliriz. Ya da onSaveInstanceState(Bundle) ile Activity durumunu kaydedebiliriz.

@Override
public void onPause(){
      super.onPause(); 
       if (mCamera !=null){
                mCamera.release();
                mCamera= null;
        }
}

onStop() metodu, Activity arkaplana atıldığında yani kullanıcıya gözükmediğinde çalıştırılır. Yaşam döngüsüne göre, ya onRestart() çağrılarak uygulama tekrar ayağa kaldırılır; ya da çok uzun süre uygulamaya geri dönülmediğinde onDestroy() metodu çağrılarak uygulama öldürülür.

onRestart() metodu, Activity’e tekrar dönüldüğü zaman kullanılır. Bu metodun ardından Activity, yaşam döngüsüne onStart() metodu ile tekrar devam eder.

onDestroy() metodu, Activity yaşam döngüsü bu metod çağrıldıktan sonra biter. Uygulama içinde finish() metodu ile çağrılmış olabilir, ya da uygulamaya uzun süre dönülmediği için bellekte yer açmak amacıyla uygulama öldürülmek istenmiş olabilir.

 Killable?Sonraki metod
onCreate()HayıronStart()
onRestart()HayıronStart()
onStart()HayıronResume() ya da onStop()
onResume()HayıronPause()
onPause()HoneyComb öncesi evetonResume() ya da onStop()
onStop()EvetonRestart() ya da onDestroy()
onDestroy()Evethiçbir şey

Yaşam döngüsü temel olarak bu 7 metod üzerine kuruludur. Bunlara ekstra olarak önemli birkaç metod daha vardır. Onlardan da bahsetmekte fayda var.

onCreateView() metodu, Activity’i LayoutInflater ile doldururken bu metodu kullanırız. onCreate() metoduna benzerdir fakat onCreate() metoduyla arayüzü sağlıyorsanız buna gerek yoktur. (Fragment yapısı içerisinde kullanılır.)

onRestoreInstanceState() metodu, onCreate() metodunda anlattığım gibi, bu sefer Activity’e tekrar dönüldüğünde aynı şeyler geçerlidir. Normalde state’leri alırken onCreate(Bundle)’ı kullanır fakat arayüz oluştuktan sonra yapılmasını istediğimiz şeyleri bu metod içerisinde yaparız. savedInstanceState yada onSaveInstanceState(Bundle)‘dan alınan değer boş ise doğal olarak null döndürecektir.

onPostCreate() metodu, onStart() metodundan sonra çağrılır. Bir Activity başka bir Activity’den miras alınca çağrılır. Mesela Activity’de arayüz tanımlanmadıysa child Activity’de arayüz giydirilebilir. Çok kullanılmaz.

onPostResume() metodu, onResume() metodundan sonra çağrılır. Animasyon ve kamera kullanımını başlatmak için kullanılır. Çok kullanılmaz.

onSaveInstanceState() metodu, Activity öldürülmeden hemen önce çağrılır ve Activity’nin durumu kaydedilir. Bu durumu onCreate(Bundle) ya da onRestoreInstanceState(Bundle) ile tekrar kullanılır.

onCreateOptionsMenu() metodu, seçenek menüsü göründüğünde bir kez çalıştırılır. Yeni menü seçenekleri eklenebilir.

onPrepareOptionsMenu() metodu, seçenek menüsü her açıldığında güncellemek için kullanılır. Menü seçenekleri enable/disable edilebilir.

onUserInteraction() metodu, aygıt ile kullanıcı arasında herhangi bir etkileşim(ekrana dokunma) olduğunda çağrılır.

onUserLeaveHint() metodu, onPause() metodundan hemen önce çağırılır. Bilinçli bir şekilde kullanıcı ana ekran tuşuna bastığında bu metod çağrılır ve Activity arkaplana alınır. Gelen telefon araması gibi bilinçsiz gerçekleşen işlemlerde çağrılmaz. Ayrıca bu metod çağrıldığında onUserInteraction() metodu da çağrılır.

onActivityResult() metodu, örnek olarak telefon rehberinden seçilen kişinin numarasını Activity’e taşıyıp kullanmak için çağrılır. Numara yanında isim soyisim gibi ekstra bilgiler de aktarılabilir.

onAttachFragment() metodu, bir Activity’e Fragment eklerken kullanılır.

onConfigurationChanged() metodu, Android sistemi tarafından yapılan değişikliklerden haberdar olmak için kullanılır. Örnek olarak ekran döndürüldüğünde istenilen işlemlerin yapılması için kullanılır. Bu metoddan yararlanabilmek için Manifest dosyası içerisinde geçerli Activity’nin tanımlamasına configChanges eklenmesi gerekir.

<activity 
    android:name="com.example.activities.ExampleActivity"
    android:configChanges="orientation | screenSize">
</activity> -

onBackPressed() metodu, geri tuşuna basınca bu metod çağrılır. Çağrıldığında Activity öldürülür fakat override edilebilir.

Bu makalemizde Android Activity Sınıfı ‘nı anlattım. Bir daha ki makalede görüşmek üzere.

https://developer.android.com/guide/components/activities/activity-lifecycle