Android’te Aktiviteler


Aktivite Nedir? (Activity)

Merhaba, bu dersimde Android’te Aktiviteler nedir, neden kullanılır? anlatacağım ve bir uygulama örneği ile bitireceğim. Uygulama örneğine ait kaynak kodu aşağıdaki linkten indirebilirsiniz.


Bir Aktivite(ingilizce karşılığı Activity) bir kullanıcı arayüzüne sahip bir ekranı temsil eder. Örneğin, bir email uygulamasının yeni emailleri gösteren bir listeye sahip olan bir aktivitesi olabilir, başka bir aktiviteyi yeni bir email hazırlamak ve göndermek için kullanıyor olabilir, ve de üçüncü bir aktivite ile de kullanıcının emailleri okumasına olanak sağlayabilir. Bu örneğimizde de görüldüğü gibi her bir aktivite bir kullanıcı arayüzüne sahip bir ekranı temsil eder. Örneğimizde görüldüğü gibi bunların elbetteki görev ve amaçları farklı olabilir. Eğer  bir uygulama birden fazla aktiviteye sahip ise, bunlardan biri uygulama ilk başlatıldığında açılmak üzere belirtilmelidir. Yani bunlardan biri Ana aktivite(başlatıcı aktivite, main activity) olmalıdır.

Daha önce Java gibi programlama dilleri ile çalıştıysanız programın her zaman bir main() fonksiyonu ile başladığını görmüşsünüzdür. Android te de durum buna çok benzerdir. Uygulama bir aktivite içindeki onCreate() metodunun çağrılması ile başlar. Bir aktiviteyi başlatan onCreate() metoduna/fonksiyonuna yapılan çağrı gibi aktivitenin yaşamına devam etmesi ve de yaşamının sonlanması gibi çeşitli durumlar için gerekli olan ve çağrılan başka metodlar/fonksiyonlar da vardır. Bunların tamamı bir aktivitenin yaşam döngüsünü oluşturur.

Activity sınıfı aşağıda verdiğim bu metodların hepsini tanımlar, bunların tamamını aktivite kodunuzda kullanmak zorunda değilsiniz. Ancak bunların her birinin anlamını/amacını/görevini öğrenmeniz çok önemlidir. Çünkü uygulamanızda bazı durumlarda illa bir çoğuna veya hepsine ihtiyacınız olacaktır. Neden gerekli olduklarını ne işe yaradıklarını anlarsanız ne zaman ihtiyacınız olacağını anlar ve kullanırsınız.

ÖNEMLİ NOT: İngilizcede yaşam döngüsünün sahip olduğu bu özel metodlara/fonksiyonlara “callback” denir. Ancak Türkçeye çevirince “geri çağırma” gibi bir anlam çıkıyor. Bu nedenle metod/fonksiyon demeyi daha uygun buldum. Ama lütfen ingilizcede “callback” denildiğini biliniz.

Metod|Tanım;;
Metod|Tanım;;
onCreate() | Bu metod yaşam döngüsündeki ilk metoddur. Ve aktivite ilk yaratıldığı zaman çağrılır.;;
onStart() | Bu metod aktivite kullanıcıya görünür olduğu zaman çağrılır.;;
onResume() | Bu metod kullanıcı uygulama ile etkileşime başladığı zaman çağrılır, yani uygulama kullanıcının etkileşimine hazır ise bu metod çağrılır diyebiliriz.;;
onPause() | Bu metod aktivite beklemeye alındığı zaman, pause durumuna geçtiği zaman çağrılır.;;
onStop() | Bu metod aktivite artık görünür değil ise çağrılır.;;
onDestroy() | Bu metod aktivite sistem tarafından yok edilmeden/sonlandırılmadan önce çağrılır.;;
onRestart() | Bu metod aktivite durdurulduktan sonra tekrar başlatıldığı zaman çağrılır.;;

Uygulama Örneği

Şimdi basit bir örnek ile bir aktivitenin yaşam döngüsünü inceleyelim. Aşağıdaki adımları takip edin lütfen. Vereceğim örnek Eclipse IDE ile hazırlanmıştır. Siz de benzer adımar ile ister Eclipse ister Android Studio IDE yi kullanabilirsiniz.

1. MerhabaActivity isimli bir Android Uygulama Projesi oluşturun.(paket adının ne olduğu önemli değil, keyfinize göre birşey seçin) Eğer daha önce hiç yapmadıysanız ilk derslerimizden olan Eclipse İle Android Geliştirmeye Başlamak adlı dersimin son kısmını okuyun lütfen.

2.  Ana aktivite dosyası olan MainActivity.java yı aşağıda gösterdiğim şekilde değiştirin.

3. Uygulamayı çalıştırıp bir aktivitenin yaşam döngüsünü inceleyin.

Aşağıdaki kod parçası MainActivity.java dosyasının değiştirilmiş halidir. Log.d metodu log mesajları üretmek için kullanılmıştır. Koda açıklamalar bıraktım açıklamalara dikkat edin, kesin okuyun.

MainActivity.java dosyası :

	

package com.androidevreni.merhabaactivity;

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

public class MainActivity extends Activity {
String mesaj = "Android";

/**
* Aktivite ilk yaratıldığı zaman bu metod çağrılır.
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(mesaj, "onCreate() metodu - yaşam döngüsünün ilk basamağı");
}

/**
* Aktivite görünür olmaya doğru giderken neredeyse görünecekken çağrılır.
*/
@Override
protected void onStart() {
super.onStart();
Log.d(mesaj, "onStart() metodu");
}

/**
* Aktivite görünür olduktan hemen sonra çağrılır.
*/
@Override
protected void onResume() {
super.onResume();
Log.d(mesaj, "onResume() metodu");
}

/**
* Başka bir aktivite başlatılırken/açılırken bulunulan aktivite için bu
* metod çağrılır.
*/
@Override
protected void onPause() {
super.onPause();
Log.d(mesaj, "onPause() metodu");
}

/**
* Aktivite artık görünür olmadığı zaman çağrılır.
*/
@Override
protected void onStop() {
super.onStop();
Log.d(mesaj, "onStop() metodu");
}

/**
* Aktivite yok edilemeden hemen önce çağrılır.
*/
@Override
public void onDestroy() {
super.onDestroy();
Log.d(mesaj, "onDestroy() metodu");
}

}

Bir aktivite arayüzünü projenin res/layout klasörü altına bulunan bir xml dosyasından yükler. Bizim örneğimizde bu dosyamız activity_main.xml içeriği aşağıda verildi. Burada tek yaptığımız bir RelativeLayout içine TextView kullanarak “Android’te Aktiviteler – Android Evreni” yazdırmaktır.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Android&apos;te Aktiviteler - Android Evreni" />

</RelativeLayout>

Aşağıda verdiğim kod satırı xml dosyasından arayüzün aktiviteye yüklenmesini sağlar.

setContentView(R.layout.activity_main);

Bir uygulama bir veya birden fazla aktiviteye sahip olabilir bunun için bir sınır yoktur. Uygulamanız için tanımladığınız her aktivite AndroidManifest.xml dosyasında da tanımlanmalıdır/belirtilmelidir. Özellikle uygulamanız için ana aktivite olan bir aktivite Manifest dosyasında tanımlandığı zaman <intent-filter> tagları içinde aksiyon(action) olarak “MAIN” kategori(category) olarak da “LAUNCHER” içermelidir. Aşağıda verdiğim AndroidManifest.xml dosyası kod parçasını inceleyiniz.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androidevreni.merhabaactivity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.androidevreni.merhabaactivity.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>
    </application>

</manifest>

Uygulamanızın bir aktivitesi için MAIN aksiyonu  ve LAUNCHER kategorisinden biri Manifest dosyasında tanımlanmazsa uygulamanızın simgesi cihazın ana ekranındaki uygulama listesinde gözükmez bu yüzden bunlar çok önemlidir.

Geldik son adıma, şimdi MerhabaActivity adlı uygulamanızı çalıştırın. Bir emülatör veya gerçek cihaz kullanabilirsiniz. Eclipse veya Android Studio da log mesajlarını görebilmek için Logcat i açın. Ve adım adım bıraktığımız mesajların ne zaman ve hangi sırayla yazıldıklarını inceleyin. Yaşam döngüsüne ait metodlarda o sırayla çağrılıyor.

ÖNEMLİ NOT: Yazıyı beğendiyseniz sosyal paylaşım butonlarını kullanarak paylaşıp bize destek olabilirsiniz. Yazının başında yazımıza puan vermeyi unutmayın. Bize geri dönüş yapmanız çok önemli. Sitemizin ve yazılarımızın gelişimi sizin geri dönüşlerinize göre şekillenecektir. Desteğinizi esirgemeyin ki dersler devamlı ve daha fazla olsun. Bize destek olun, size Android Uygulama Geliştirmeyi öğretelim!

İyi Çalışmalar Herkese! :)

Mustafa Demir

Elektronik, linux, android, ios, matlab, latex, python, C, ve C++ meraklısıyım. Profesyonel Android Uygulama Geliştiricisi olma yolunda ilerliyorum. Ubuntu 15.04 kullanıcısıyım. Merakımın peşinden koşmayı severim.

Şunlar da ilginizi çekebilir

4 yorum

  • Yunus
    11 Nisan 2015 at 10:42

    Mustafa Abi ben bu işe heveslendim biraz ama PC yok bende android sisteminde kullanabileceğim bi kod yazma programı önerebilirmisin rica etsem

  • emrah
    29 Ekim 2015 at 12:55

    Guzel paylasımınız, düzgün anlatımınız için teşekkürler. Oldukça faydalı bir makale olmuş.

  • Tayfun
    22 Ocak 2016 at 10:54

    Yeni başlayan birisi olarak size söyleyebileceğin tek şey:
    Anlatım ,paylaşım çok güzel. Teşekkürler.

LEAVE A COMMENT