Android Launch Mode Nedir?
Giriş
Merhaba, hiç Android uygulamanızda aynı aktivite ile arka arkaya karşılaştınız mı? Geri tuşuna basmanıza rağmen aynı aktivete tekrardan karşınıza çıktı mı? Bu makalede bahsettiğimiz durumlardan kurtulmak için çeşitli aktivite launch mode seçeneklerinde bahsedeceğim.
Launch Mode’lardan bahsetmeden önce task dediğimiz şeyin ne olduğunu tekrardan hatırlayalım. Task, bir veya birden fazla aktivitenin bulunduğu ve kullanıcının etkileşime geçtiği bir koleksiyon diyebiliriz. Uygulamanız yeni bir aktivite oluşturduğu zaman, çağırdığı zaman veya yok ettiği zaman ise backstack dediğimiz arkaplanda aktivitelerin sırasını tutan bir liste güncellenir. Bu kavramlar hakkında daha detaylı bilgi için referanslar kısmındaki linklere göz atabilirsiniz.
Developer için beş farklı mod bulunmaktadır:
- Standard
- SingleTop
- SingleTask
- SingleInstance
- SingleInstancePerTask
Aksi belirtilmedikçe bütün aktiviteler Standard olarak oluşturulur.
Standard Mode
Bu mod task içerisinde aktiviteden yeni bir instance daha oluşturur. Bu sebepten aynı aktiviteden ya aynı task ya da farklı tasklarda birden fazla bulunabilir.
<activity android:launchMode="standard">
Örnek olarak 4, A, B, C, D aktivitelerimiz olduğunu varsayalım ve oluşma sıraları şu şekilde olsun:
A -> B -> C -> D
Eğer aktivite B’yi tekrardan oluşturursak task içerisindeki sıra şu şekilde güncellenir:
A -> B -> C -> D -> B aktivite B tekrardan oluşturuldu ve backstack’in en üstüne yerleştirildi
SingleTop Mode
Bu modun standard moddan farkı, singleTop aynı aktiviteyi eğer backstack içinde var ise ve en üstteyse tekrardan oluşturmaz.
<activity android:launchMode="singleTop">
Örnek olarak 4, A, B, C, D aktivitelerimiz olduğunu varsayalım ve oluşma sıraları şu şekilde olsun:
A -> B -> C -> D
Eğer aktivite D’yi tekrardan oluşturursak task içerisindeki sıra şu şekilde güncellenir:
A -> B -> C -> D aktivite D tekrardan oluşturulmadı.
Ama eğer aktivite B’yi oluştursaydık task içerisindeki sıra şu şekilde güncellenicekti:
A -> B -> C -> D -> B aktivite B tekrardan oluşturuldu çünkü backstack’in en üstünde değildi.
SingleTask Mode
Bu mod singleTop modu gibi çalışır, fakat singleTop’tan farklı olarak eğer aktivite stackte var ise üstünde hangi aktivite varsa siler ve aktiviteyi en üste alır.
<activity android:launchMode="singleTask">
Örnek olarak 3, A, B, C aktivitelerimiz olduğunu varsayalım ve oluşma sıraları şu şekilde olsun:
A -> B -> C
Eğer aktivite D’yi oluşturursak task içerisindeki sıra şu şekilde güncellenir:
A -> B -> C -> D aktivite D oluşturuldu.
Eğer aktivite B’yi tekrardan, aktivite D’yi oluşturduktan sonra çağırırsak ise task içerisindeki sıra şu şekilde güncellenir:
A -> B aktivite B eski durumunda tekrarda çağırıldı, backstack’in en üstüne getirildi ve üstünde kalan aktiviteler silindi
SingleInstance Mode
Bu mod singleTask modu gibi çalışır, fakat aradaki fark aktivitenin yeni bir taskta oluşturulmasıdır. Oluşan bu aktivitenin bulunduğu task, başka bir aktivite içeremez.
<activity android:launchMode="singleInstance">
Örnek olarak 4, A, B, C, D aktivitelerimiz olduğunu varsayalım ve oluşma sıraları şu şekilde olsun:
A -> B -> C -> D
Eğer aktivite D’yi oluşturursak task içerisindeki sıra şu şekilde güncellenir:
Task1: A -> B -> C
Task2: D farklı bir task içerisinde aktivite D oluşturuldu
Eğer aktivite D’yi tekrardan oluşturursak task içerisindeki sıra şu şekilde güncellenir:
Task1: A -> B -> C
Task2: D aktivite D tekrardan oluşturulmadı, çünkü task2 içerisinde zaten vardı ve eski durumunda tekrardan çağırıldı
Peki ya singleInstance modunda olmayan bir aktivite E oluştursaydık?
Task1: A -> B -> C -> E
Task2: D aktivite E task1 içerisinde oluşturuldu
SingleInstancePerTask Mode
Bu mod singleInstance modundan farklı olarak aynı aktivitenin tekrardan farklı tasklarda yaratılmasına imkan sağlar
Sonuç
Bu makalede aktivitelerin launch modlarını birlikte inceledik. Bu modların backstack ve taskları nasıl etkilediğini, bu sayede kullanıcılara kusursuz bir şekilde uygulama içerisinde aktiviteler arasında geçişin nasıl sağlanacağını görmüş olduk.