Android’de Launchmodes

Sertaç Ayhan
Huawei Developers - Türkiye
3 min readDec 29, 2023

Giriş

Merhaba arkadaşlar, bugün Android’in temel kavramlarından biri olan başlatma modlarını ele almaya çalışacağız.

Bu yazımda kavramları olabildiğince basit bir şekilde anlatmaya çalıştım. Açıkçası her Android geliştiricisinin görevler, backstack ve başlatma modları konusunda sağlam bir bilgiye sahip olması gerektiğini düşünüyorum. Bu düşünce bana bu yazıyı yazmam gerektiğini düşündürdü. Umarım hem kendim için hem de Android geliştirmeye yeni başlayan arkadaşlar için öğretici olur.

Hadi başlayalım.

Tasks and Backstack

Basitçe task, kullanıcıların uygulamanızda bir şey yapmaya çalışırken etkileşimde bulunduğu etkinliklerin toplamıdır.

Cihazın Ana ekranı çoğu görev için başlangıç ​​yeridir. Kullanıcı, uygulama başlatıcıda veya Ana ekranda bir uygulamanın veya kısayolun simgesine dokunduğunda, o uygulamanın görevi ön plana çıkar. Uygulama için herhangi bir task yoksa yeni bir task oluşturulur ve bu uygulamanın main activity’si, stack’teki root activity olarak açılır.

Backstack, etkinlikleri açılma sırasına göre saklayan bir stack’tir. Kullanıcı “Geri” butonuna bastığında en üstteki aktivite stack’ten kaldırılır ve bir önceki aktivite aktif hale gelir.

Kullanıcı art arda Geri tuşuna basarsa, kullanıcı Ana ekrana (veya görev başladığında çalışmakta olan etkinliğe) dönene kadar stack’teki her activity kendisinden önceki activity’i gösterecek şekilde açılır. Tüm eylemler stack’ten kaldırıldıktan sonra task artık etkin değildir.

Not: İlk kod blokları AndroidManifest.xml’de bir başlatma modunun tanımlanmasını gösterir, ikincisi ise başlatma modunu tanımlamak için intent flagleri ile bir etkinliğin çağrılmasını gösterir.

Launch Modes

  1. Standard
  • Activity’nin yeni bir örneği her oluşturulduğunda, backstack’in en üstüne yerleştirilir.
  • Stack’te activity’nin bir örneği zaten mevcutsa, yeni bir örnek oluşturulur ve her iki örnek de stack’te kalır.
<activity android:launchMode=”standard” />
val intent = Intent(this, MyActivity::class.java)
startActivity(intent)
  • Standart başlatma modu, bağımsız olan ve örnek oluşturma veya görev yığınına yerleştirme konusunda özel gereksinimleri olmayan etkinlikler için çok uygundur.

2. singleTop

  • Activity’nin bir örneği stack’in en üstünde zaten mevcutsa yeni bir örnek oluşturulmaz.
  • Activity stack’in en üstünde değilse yeni bir örnek oluşturulur ve en üste yerleştirilir.
<activity android:launchMode=”singleTop” />
val intent = Intent(this, MyActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
startActivity(intent)
  • Stack’in en üstünde belirli bir activity’nin bir örneğinin mevcut olmasını sağlamak istediğiniz senaryolarda kullanışlıdır
  • Olayları veya bildirimleri işleyen ve kullanıcı arayüzlerini güncellemesi gereken etkinlikler için uygundur.

3. singleTask

  • Yeni bir task oluşturulur ve activity’nin yeni bir örneği, yeni taskin köküne yerleştirilir.
  • Activity’nin bir örneği farklı bir task’ta zaten mevcutsa, mevcut örnek yeniden kullanılır ve üzerindeki tüm diğer activity’ler temizlenir.
<activity android:launchMode="singleTask" />
val intent = Intent(this, MyActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
  • Ana ekran gibi uygulamanızın ana giriş noktası için idealdir.
  • Uygulamanın tamamında activity’nin yalnızca bir örneğinin mevcut olmasını sağlayarak gereksiz kullanımı azaltır.
  • Uygulamanızın farklı bölümlerini veya kategorilerini temsil eden etkinlikler için faydalıdır.

4. singleInstance

SingleTask’e benzer ancak etkinlik ayrı bir göreve yerleştirilir. Aynı görevde başka hiçbir activity’e izin verilmez.

<activity android:launchMode="singleInstance" />
val intent = Intent(this, MyActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_INSTANCE)
startActivity(intent)
  • Ayrı olarak var olması gereken ve diğer activity’ler ile birlikte bir task’in parçası olmaması gereken activity’ler için uygundur.
  • Telefonla arama(dialer) veya kamera gibi belirli, bağımsız görevleri gerçekleştiren activity için uygundur.
  • Ayrı bir task oluşturduğundan ve activity’nin yalnızca bir örneği mevcut olabileceğinden dikkatli kullanın.

Sonuç

Kavramları olabildiğince basit bir şekilde ele aldık. Buradaki örnekler kavramın daha iyi anlatılması amacıyla verilmiştir, kullanım şekilleri uygulama ihtiyaçlarına göre değişiklik gösterebilir.

Referanslar

--

--