Android

Android Aktiviteler (Activities)

► Detaylı anlatım

Aktivite kullanıcıların bir işlem yapmak için kullandığı ekran oluşturan bir uygulama bileşenidir. Bu işlemler telefon çevirme, fotoğraf çekme, e-mail gönderme gibi faaliyetleri içerir. Her aktivite aslında genellikle ekranı dolduran ve diğer pencerelerin üzerinde olan bir penceredir.

Bir uygulama birbiriyle bağlantılı birden fazla aktiviteden oluşur. Uygulama içindeki bir aktivite ana (main) aktivite olarak tanımlanır ve uygulama ilk çalıştırıldığında kullanıcı bu ekranı görür. Her aktivite farklı işlemler gerçekleştirmek için bir diğeri aktiviteyi çağırabilir. Yeni bir aktivite çalıştığında, önceki aktivite durdurulur, ancak sistem tarafından stack adı verilen bellek biriminde tutulur.

Yeni çalıştırılan bir aktivite nedeniyle bir aktivite durdurulduğunda, bu durum değişikliği aktivitelerin yaşam döngüsü metotları tarafından aktiviteye bildirilir. Durumundaki değişikliklere bağlı olarak, aktivitelerin alabileceği bir kaç metod vardır. Sistem aktiviteleri oluşturarak, durdurarak, tekrar başlatarak veya yok ederek gerçekleştirdiği durum değişikliklerinde, duruma uygun olarak özel işlemlerin yapılabilmesine olanak sağlar. Örneğin, durdurulduğunda, bir aktivite ağ ve veritabanı gibi büyük nesneleri serbest bırakmalıdır. Aktivite devam ettiğinde, gerekli kaynaklar tekrar elde edilir ve işlemler devam eder.

Aktivite Oluşturma

Bir aktivite oluşturmak için, Activity sınıfından veya bu sınıftan türetilmiş bir sınıftan bir alt sınıf türetmeniz gerekir. Oluşturduğunuz sınıf içinde, bir aktivite oluşturulduğunda, durdurulduğunda, devam ettiğinde veya yok edildiğinde yaşam döngüsündeki farklı durumlar arasında bir aktivitenin yaptığı geçişler esnasında sistem tarafından çağrılan geri çağrı metotlarının kod kısımlarını oluşturmanız gerekir.

En önemli geri çağrı metotları:

onCreate()

Bir aktivite oluşturulduğunda çağrılan bu metodun kodlarını yazmanız gerekir. Kodlar içinde, aktivitenizin önemli bileşenlerini başlatmanız gerekir. Daha da önemlisi, setContentView() fonksiyonunu çağırarak aktivite kullanıcı arabirimini oluşturmanız gerekir.

onPause()

Kullanıcı bir aktiviteyi kullanmayı bıraktığında, sistem bu metodu çağırır. Burada, yapmanız gereken değişiklikleri uygulamanız gerekir.

Kullanıcı arayüzü oluşturma

Bir aktivitenin kullanıcı arayüzü View sınıfından türetilen nesneler tarafından sağlanır. Her bir view kontrolü aktivite penceresi içinde belirli bir dikdörtgen alanı kontrol eder ve kullanıcı işlemlerine karşılık cevap verir. Örneğin, kullanıcı tıkladığında belirli bir işlem yapan bir buton bir view'dır.

Android, program arayüzünü oluşturmak için kullanabileceğiniz bir çok hazır view sağlar. Widget'lar ekran için görsel ve interaktif özelliği olan buton, metin alanı, checkbox gibi view'lardır. Ekran görüntüsü (layout) ViewGroup sınıfından türetilen ve çocuk view'ları için linear, grid veya relative görüntü gibi benzersiz bir görüntü sağlayan view'lardır. Aynı zamanda, kendi widget ve görüntülerinizi oluşturmak ve aktivite ekranınıza uygulamak için View ve ViewGroup sınıflarından veya mevcut alt sınıflarından yeni sınıflar türetebilirsiniz.

View'lar kullanarak görünüm tanımlamanın en yaygın yöntemi uygulama kaynakları arasına kaydedilen XML görüntü dosyası kullanmaktır. Bu yöntemle, programın kullanıcı arayüzünü aktivitedeki işlemleri yönlendiren kaynak kodlarından bağımsız olarak tanımlamış olursunuz. Aktiviteniz için kullanıcı arayüzünün görüntüsünü kaynak ID'sini setContentView() metodu ile kullanarak ayarlayabilirsiniz.

Manifest dosyasında aktivite bildirimi

Sistem tarafından giriş yapılabilmesi için, aktivitenizin bildirimini manifest dosyasında yapmanız gerekir. Aktivitenin bildirimini yapmak için manifest dosyasını açın ve <application> elemanının alt elemanı olarak bir <activity> elemanı ekleyin:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity"/>
      ...
  </application ... >
  ...
</manifest>

Bu eleman içine eklenebilecek aktivite adı, ikonu ve arayüzü gibi bir kaç tane özellik daha vardır. Burada, mutlaka tanımlanması gereken tek özellik aktivitenin sınıf adını gösteren android:name özelliğidir. Uygulamanızı yayınladıktan sonra, bazı işlemler devre dışı kalacağından, bu adı değiştirmemeniz gerekir.

Intent filtrelerini kullanma

<activity> elemanı, diğer uygulamalara ait bileşenlerin çalıştırma yöntemlerini belirlemek için <intent-filter> elamanını kullanarak farklı intent filtreleri tanımlayabilir.

Android SDK aracını kullanarak yeni bir uygulama oluşturduğunuzda, otomatik olarak oluşturulan aktivite, ana işleme karşılık veren bir aktivite bildirimini yapan ve launcher kategorisine yerleştirilmesi gereken bir intent filtre içerir:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<action> elemanı burasının uygulamanın ana girişi olduğunu gösterir. <category> elemanı bu aktivitenin kullanıcıların bu aktiviteyi çalıştırması için sistem uygulama başlatıcısında listelenmesi gerektiğini gösterir.

Eğer uygulamanızda yer alan aktivitelerin diğer uygulamalar tarafından çalıştırılmasını istemiyorsanız, yukarıda gösterilenler dışında intent filtre tanımlamanıza gerek yoktur.

Aktivitenin başlatılması

startActivity() metoduna başlatmak istediğiniz aktiviteyi gösteren bir Intent nesnesini parametre olarak geçirerek bir aktiviteyi başlatabilirsiniz. Intent nesnesi başlatmak istediğiniz aktiviteyi veya gerçekleştirmek istediğiniz işlemi tanımlar. Sistem diğer uygulamalar içinde de olsa uygun olan aktiviteyi bulur ve başlatır.

Kendi programınız içinde, bir aktiviteden diğer bir aktiviteyi çağırmak için aşağıdaki komut satırlarını kullanabilirsiniz:

Intent intent = new Intent(this, AnotherActivity.class);
startActivity(intent);

Uygulamalar, bir aktivite içinde yer alan verileri kullanarak bir eposta göndermek gibi bir işlem yapmak istediğinde, android cihaz içinde yer alan diğer uygulamalarda bulunan aktiviteleri kullanarak bu işlemi gerçekleştirir. Bu durumda uygulama sadece yapmak istediği işlemi gösteren bir Intent oluşturur ve sisteme bildirir. Sistem bu işlemi yapacak uygun aktiviteyi çalıştırır. Eğer aynı işlemi yapabilecek birden fazla aktivite varsa, kullanılacak olan aktiviteyi kullanıcı belirler. Aşağıdaki satırlar kullanıcının bir eposta göndermesini sağlar:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, recipientArray); /* epostanın gideceği adres */
startActivity(intent);

Aktivitenin sonuç elde edecek şekilde başlatılması

Bir aktiviteyi sonuç alacak şekilde başlatmak için startActivityForResult() metodu, başlatılan aktiviteden elde edilen sonuçları elde etmek ve işlem yapmak için ise, onActivityResult() metodu kullanılır.

Aktiviteyi kapatma

Bir aktivitenin finish() metodunu kullanarak aktiviteyi kapatabilirsiniz. Daha önceden başlatmış olduğunuz bir aktiviteyi kapatmak için de finishActivity() fonksiyonunu kullanabilirsiniz.

Android sistemi bir aktivitenin ömrünü uygulamanız için yönettiğinden, bir aktiviteyi yukarıdaki metotları kullanarak sona erdirmemeniz tercih edilir.