Görevler ve arka yığın

Görev, kullanıcıların uygulamanızda bir şey yapmaya çalışırken etkileşimde bulundukları etkinlikler koleksiyonudur. Bu etkinlikler, arka yığın adı verilen bir grup halinde, her bir etkinliğin açıldığı sırada düzenlenir.

Örneğin, bir e-posta uygulamasında yeni mesajların listesini gösteren bir etkinlik olabilir. Kullanıcı bir mesajı seçtiğinde, mesajı görüntülemek için yeni bir etkinlik açılır. Bu yeni etkinlik arka yığına eklenir. Ardından, kullanıcı Geri'ye dokunduğunda veya geri hareketi yaptığında, bu yeni etkinlik biter ve yığından çıkarılır.

Bir görevin yaşam döngüsü ve geri yığını

Cihazın ana ekranı çoğu görevin başlangıç noktasıdır. Kullanıcı, uygulama başlatıcıda veya Ana ekranda bir uygulamanın ya da kısayolun simgesine dokunduğunda söz konusu uygulamanın görevi ön plana gelir. Uygulama için herhangi bir görev yoksa yeni bir görev oluşturulur ve yığındaki kök etkinliği olarak söz konusu uygulamanın ana etkinliği açılır.

Geçerli etkinlik başka bir etkinlik başlattığında, yeni etkinlik yığının en üstüne aktarılır ve odağı alır. Önceki etkinlik yığında kalır ancak durdurulur. Bir etkinlik durdurulduğunda sistem, kullanıcı arayüzünün geçerli durumunu korur. Kullanıcı geri işlemini gerçekleştirdiğinde, mevcut etkinlik yığının en üstünden atılır ve silinir. Önceki etkinlik devam eder ve kullanıcı arayüzünün önceki durumu geri yüklenir.

Yığındaki etkinlikler hiçbir zaman yeniden düzenlenmez, yalnızca mevcut etkinlik tarafından başlatıldıklarında ve Geri düğmesi veya hareketiyle kullanıcı tarafından reddedildiğinde yığına aktarılıp çıkarılmaz. Bu nedenle, geri yığın, son giren, ilk çıkar nesne yapısı olarak çalışır. Şekil 1'de, etkinliklerin bir arka yığına aktarıldığı ve gruptan çıkarıldığı bir zaman çizelgesi gösterilmektedir.

Şekil 1. Bir görevdeki her yeni etkinliğin arka yığına nasıl öğe eklediğini gösteren temsil. Kullanıcı Geri'ye dokunduğunda veya geri hareketi yaptığında, mevcut etkinlik yok edilir ve önceki etkinlik devam ettirilir.

Kullanıcı dokunmaya veya Geri gitmeye devam ettikçe, kullanıcı Ana ekrana veya görev başladığında hangi etkinliğe devam etmekte olana kadar Ana ekrana dönene kadar yığındaki her etkinlik bir öncekinin gösterilmesi için açılır. Yığındaki tüm etkinlikler kaldırıldığında görev artık mevcut olmaz.

Kök başlatıcı etkinlikleri için geriye dokunma davranışı

Kök başlatıcı etkinlikleri, hem ACTION_MAIN hem de CATEGORY_LAUNCHER ile bir amaç filtresi tanımlayan etkinliklerdir. Bu etkinlikler benzersizdir çünkü uygulama başlatıcıdan uygulamanıza giriş noktaları görevi görür ve bir görev başlatmak için kullanılırlar.

Kullanıcı kök başlatıcı etkinliğinden geri dokunduğunda veya hareket ettiğinde sistem, cihazın çalıştırıldığı Android sürümüne bağlı olarak etkinliği farklı şekilde işler.

Android 11 ve önceki sürümlerde sistem davranışı
Sistem etkinliği bitirir.
Android 12 ve sonraki sürümlerde sistem davranışı

Sistem, etkinliği bitirmek yerine etkinliği ve görevini arka plana taşır. Bu davranış, Ana Sayfa düğmesini veya hareketini kullanarak bir uygulamadan çıkarken varsayılan sistem davranışıyla eşleşir.

Çoğu durumda bu davranış, kullanıcıların uygulamayı soğuk durumdan tamamen yeniden başlatmak yerine hazır durumdan daha hızlı bir şekilde devam ettirebilecekleri anlamına gelir.

Özel geri gezinme sağlamanız gerekiyorsa onBackPressed() değerini geçersiz kılmak yerine AndroidX Activity API'lerini kullanmanızı öneririz. AndroidX Activity API'leri, sisteme müdahale eden herhangi bir bileşen yoksa otomatik olarak uygun sistem davranışını dikkate alır.

Ancak, uygulamanız Geri gezinmeyi işlemek ve etkinliği bitirmek için onBackPressed() etiketini geçersiz kılarsa uygulamanızı bitirmek yerine super.onBackPressed() değerine geri çağıracak şekilde güncelleyin. super.onBackPressed() çağrısı, uygun olduğunda etkinliği ve görevini arka plana taşır ve kullanıcılar için uygulamalar genelinde daha tutarlı bir gezinme deneyimi sağlar.

Arka plan ve ön plan görevleri

Şekil 2. İki görev: B görevi ön planda kullanıcı etkileşimi alırken A görevi arka plandadır ve devam ettirilmesini beklemektedir.

Görev, kullanıcı yeni bir göreve başladığında veya Ana ekrana gittiğinde arka planda hareket edebilen uyumlu bir birimdir. Arka planda çalışırken, görevdeki tüm etkinlikler durdurulur ancak görevin arka yığını korunmaz. Şekil 2'de gösterildiği gibi, başka bir görev gerçekleşirken göreve odaklanılmaz. Daha sonra görev ön plana dönebilir. Böylece kullanıcılar kaldıkları yerden devam edebilir.

İkisi mevcut etkinlik altında olmak üzere, yığınında üç etkinlik bulunan mevcut Görev A için aşağıdaki görev akışını düşünün:

  1. Kullanıcı Ana Sayfa düğmesini veya hareketini kullanır, ardından uygulama başlatıcıdan yeni bir uygulama başlatır.

    Ana ekran göründüğünde, A görevi arka plana gider. Yeni uygulama başladığında, sistem o uygulama için kendi etkinlik yığınıyla bir görev başlatır (B görevi).

  2. Uygulamayla etkileşimde bulunduktan sonra kullanıcı Ana Sayfa'ya tekrar döner ve A görevini başlatan uygulamayı seçer.

    Şimdi A Görevi ön plana çıkıyor. Yığındaki üç etkinlik de devam ediyor ve yığının en üstündeki etkinlik devam ediyor. Bu noktada, kullanıcı Ana ekrana gidip görevi başlatan uygulama simgesini seçerek veya Son Kullanılanlar ekranından uygulama görevini seçerek de B görevine geri dönebilir.

Birden fazla etkinlik örneği

Şekil 3. Tek bir etkinlik birden çok kez örneklenebilir.

Arka yığındaki etkinlikler hiçbir zaman yeniden düzenlenmez. Uygulamanız, kullanıcıların birden fazla etkinlikten belirli bir etkinlik başlatmalarına izin veriyorsa, etkinliğin önceki herhangi bir örneğini en üste getirmek yerine bu etkinliğin yeni bir örneği oluşturulur ve yığına aktarılır. Bu şekilde, uygulamanızdaki bir etkinlik, Şekil 3'te gösterildiği gibi farklı görevlerde bile birden çok kez örneklenebilir.

Kullanıcı Geri düğmesini veya hareketini kullanarak geri giderse etkinlik örnekleri açıldıkları sırada görüntülenir ve her biri kendi kullanıcı arayüzü durumuna sahip olur. Bununla birlikte, bir etkinliğin birden fazla kez örneklenmesini istemiyorsanız bu davranışı değiştirebilirsiniz. Görevleri yönetme hakkındaki bölümde bu konu hakkında daha fazla bilgi edinebilirsiniz.

Çok pencereli ortamlar

Uygulamalar, Android 7.0 (API düzeyi 24) ve sonraki sürümlerde desteklenen çok pencereli bir ortamda eş zamanlı olarak çalıştığında, sistem her pencere için görevleri ayrı olarak yönetir. Her pencerede birden fazla görev olabilir. Aynı durum Chromebook'larda çalışan Android uygulamaları için de geçerlidir: Sistem, görevleri veya görev gruplarını pencere bazında yönetir.

Yaşam döngüsü özeti

Etkinlikler ve görevlerle ilgili varsayılan davranışı özetlemek için:

  • B Etkinliği başladığında, A Etkinliği durdurulur, ancak sistem, kaydırma konumu ve formlara girilen metinler gibi kendi durumunu korur. Kullanıcı B Etkinliği'ndeyken Geri hareketine dokunur veya geri hareketini kullanırsa A Etkinliği geri yüklenerek devam eder.

  • Kullanıcı Ana Sayfa düğmesini veya hareketini kullanarak bir görevden ayrıldığında geçerli etkinlik durdurulur ve görevi arka plana geçer. Sistem, görevdeki her etkinliğin durumunu korur. Kullanıcı daha sonra, görevi başlatan başlatıcı simgesini seçerek göreve devam ederse, görev ön plana gelir ve yığının en üstündeki işleme devam eder.

  • Kullanıcı geri dokunur veya geri hareketi yaparsa mevcut etkinlik yığından çıkarılır ve silinir. Yığındaki önceki etkinlik devam eder. Bir etkinlik yok edildiğinde, sistem etkinliğin durumunu saklamaz.

    Uygulamanız Android 12 veya sonraki sürümleri çalıştıran bir cihazda çalışırken kök başlatıcı etkinlikleri için bu davranış farklıdır.

  • Etkinlikler, diğer görevlerden bile birden çok kez örneklenebilir.

Görevleri yönetin

Android, arka arkaya başlatılan tüm etkinlikleri aynı görevde, son gelen ilk gelen yığınına yerleştirerek görevleri ve arka yığını yönetir. Bu, çoğu uygulama için son derece uygundur ve genellikle etkinliklerinizin görevlerle nasıl ilişkilendirileceği veya bunların arka yığında nasıl bulunacağı konusunda endişelenmeniz gerekmez.

Ancak, normal davranışı kesintiye uğratmak istediğinize karar verebilirsiniz. Örneğin, uygulamanızdaki bir etkinliğin mevcut göreve değil, yeni bir göreve başlatıldığında başlamasını isteyebilirsiniz. Veya bir etkinliği başlattığınızda geri yığının üzerinde yeni bir örnek oluşturmak yerine mevcut bir örneğini öne çıkarmak isteyebilirsiniz. Veya kullanıcı görevden ayrıldığında arka yığınınızın, kök etkinlik dışındaki tüm etkinliklerden silinmesini isteyebilirsiniz.

Bunları ve daha fazlasını <activity> manifest öğesindeki özellikleri ve startActivity()'e ilettiğiniz amaçtaki işaretleri kullanarak yapabilirsiniz.

Görevleri yönetmek için kullanabileceğiniz temel <activity> özellikleri şunlardır:

Kullanabileceğiniz ana amaç işaretleri şunlardır:

Aşağıdaki bölümlerde, etkinliklerin görevlerle nasıl ilişkilendirildiğini ve arka yığında nasıl davrandıklarını tanımlamak için bu manifest özelliklerinin ve amaç işaretlerinin nasıl kullanılacağı anlatılmaktadır.

Görevlerin ve aktivitelerin Son Kullanılanlar ekranında nasıl temsil edildiği ve yönetildiğine ilişkin hususlar da tartışılmıştır. Normalde, görevin ve etkinliklerinizin Son Kullanılanlar ekranında nasıl temsil edileceğinin sistem tarafından tanımlanmasına izin verirsiniz ve bu davranışı değiştirmenize gerek yoktur. Daha fazla bilgi için Son aramalar ekranı'na bakın.

Başlatma modlarını tanımlama

Başlatma modları, yeni bir etkinlik örneğinin geçerli görevle nasıl ilişkilendirileceğini tanımlamanızı sağlar. Başlatma modlarını aşağıdaki bölümlerde açıklanan iki şekilde tanımlayabilirsiniz:

  • Manifest dosyasını kullanma

    Manifest dosyanızda bir etkinlik bildirdiğinizde, bu etkinliğin başladığında görevlerle nasıl ilişkilendirileceğini belirtebilirsiniz.

  • Amaç işaretlerini kullanma

    startActivity() çağrısı yaptığınızda Intent içine yeni etkinliğin mevcut görevle nasıl ilişkilendirileceğini (veya mevcut görevle nasıl ilişkilendirileceğini) açıklayan bir işaret ekleyebilirsiniz.

Dolayısıyla, A Etkinliği B Etkinliği'ni başlatırsa, B Etkinliği mevcut görevle nasıl ilişkilendirileceğini manifest dosyasında tanımlayabilir ve A Etkinliği, B Etkinliğinin mevcut görevle nasıl ilişkilendirebileceğini istemek için bir amaç işareti kullanabilir.

Her iki etkinlik de B Etkinliğinin bir görevle nasıl ilişkilendirileceğini tanımlarsa A Etkinliği'nin amaçta tanımlandığı şekilde isteği, manifest dosyasında tanımlandığı şekilde B Etkinliğinin isteğine göre karşılanır.

Manifest dosyasını kullanarak başlatma modlarını tanımlama

Manifest dosyanızda bir etkinlik tanımlarken <activity> öğesinin launchMode özelliğini kullanarak bu etkinliğin bir görevle nasıl ilişkilendirileceğini belirtebilirsiniz.

launchMode özelliğine atayabileceğiniz beş başlatma modu vardır:

  1. "standard"
    Varsayılan mod. Sistem, başlatıldığı görevde etkinliğin yeni bir örneğini oluşturur ve amacı buna yönlendirir. Etkinlik birden çok kez başlatılabilir, her örnek farklı görevlere ait olabilir ve bir görevin birden fazla örneği olabilir.
  2. "singleTop"
    Geçerli görevin üst kısmında etkinliğin bir örneği zaten bulunuyorsa sistem, etkinliğin yeni bir örneğini oluşturmak yerine amacı onNewIntent() yöntemine çağrı yoluyla bu örneğe yönlendirir. Etkinlik birkaç kez başlatılır. Her örnek farklı görevlere ait olabilir ve bir görevin birden fazla örneği olabilir (ancak arka yığının tepesindeki etkinlik, etkinliğin mevcut bir örneği değilse).

    Örneğin, bir görevin geri yığınının en üstte B, C ve D etkinlikleri olacak şekilde A kök etkinliğinden oluştuğunu (yığın A-B-C-D en üstte olacak şekilde) oluştuğunu varsayalım. Niyet, D tipi bir etkinlik için gelir. D'de varsayılan "standard" başlatma modu varsa sınıfın yeni bir örneği başlatılır ve yığın A-B-C-D-D haline gelir. Ancak D'nin başlatma modu "singleTop" ise mevcut D örneği, yığının en üstünde olduğu ve yığın A-B-C-D olarak kaldığı için amacı onNewIntent() aracılığıyla alır. Öte yandan, B türü bir etkinliğe yönelik niyet gelirse başlatma modu "singleTop" olsa bile yığına yeni bir B örneği eklenir.

  3. "singleTask"
    Sistem, yeni bir görevin kök dizininde etkinlik oluşturur veya aynı yakın ilgi alanına sahip mevcut bir görevdeki etkinliği bulur. Etkinliğin bir örneği zaten varsa sistem, yeni bir örnek oluşturmak yerine niyeti onNewIntent() yöntemine yapılan bir çağrı aracılığıyla mevcut örneğe yönlendirir. Bu arada, üst tarafındaki diğer tüm etkinlikler yok edilir.
  4. "singleInstance".
    Sistemin, örneği barındıran göreve başka herhangi bir etkinlik başlatmaması dışında, davranış "singleTask" ile aynıdır. Etkinlik her zaman görevin tek ve tek üyesidir. Bu proje tarafından başlatılan tüm etkinlikler ayrı bir görevde açılır.
  5. "singleInstancePerTask".
    Etkinlik yalnızca görevin kök etkinliği, yani görevi oluşturan ilk etkinlik olarak çalışabilir. Bu nedenle, bir görevde bu etkinliğin yalnızca bir örneği olabilir. singleTask başlatma modunun aksine bu etkinlik, FLAG_ACTIVITY_MULTIPLE_TASK veya FLAG_ACTIVITY_NEW_DOCUMENT işareti ayarlanmışsa farklı görevlerde birden fazla örnekte başlatılabilir.

Başka bir örnek olarak, Android Tarayıcı uygulaması <activity> öğesinde singleTask başlatma modunu belirterek web tarayıcısı etkinliğinin her zaman kendi görevinde açıldığını bildirir. Diğer bir deyişle, uygulamanız Android Tarayıcı'yı açmak için bir niyet gönderirse etkinliği, uygulamanızla aynı göreve yerleştirilmez. Bunun yerine Tarayıcı için yeni bir görev başlatılır veya Tarayıcı'nın arka planda zaten çalışan bir görevi varsa bu görev yeni amacı işlemek üzere yönlendirilir.

Bir etkinliğin yeni bir görevde veya onu başlatan etkinlikle aynı görevde başlamasından bağımsız olarak, Geri düğmesi ve hareketi kullanıcıyı her zaman bir önceki etkinliğe götürür. Bununla birlikte, singleTask başlatma modunu belirten bir etkinlik başlatırsanız ve bu etkinliğin bir örneği arka plan görevinde bulunursa bu görevin tamamı ön plana getirilir. Bu noktada, geri yığın, yığının en üstüne getirilen görevdeki tüm etkinlikleri içerir. Şekil 4'te bu tür bir senaryo gösterilmektedir.

Şekil 4. Başlatma modu "singleTask" olan bir etkinliğin arka yığına nasıl eklendiğini gösteren temsil. Etkinlik zaten kendi arka yığını olan bir arka plan görevinin parçasıysa bu arka yığının tamamı da mevcut görevin üstüne gelir.

Manifest dosyasında başlatma modlarını kullanma hakkında daha fazla bilgi için <activity> öğesi dokümanlarına bakın.

Intent bayraklarını kullanarak başlatma modlarını tanımlama

Bir etkinliği başlatırken startActivity() hizmetine sunduğunuz amaca işaretler ekleyerek bir etkinliğin varsayılan ilişkilendirmesini görevle değiştirebilirsiniz. Varsayılan davranışı değiştirmek için kullanabileceğiniz işaretler şunlardır:

FLAG_ACTIVITY_NEW_TASK

Sistem, etkinliği yeni bir görevde başlatır. Başlatılan etkinlik için bir görev zaten çalışıyorsa bu görev, son durumu geri yüklenerek ön plana getirilir ve etkinlik onNewIntent() ürününde yeni amacı alır.

Bu işlem, önceki bölümde açıklanan "singleTask" launchMode değeriyle aynı davranışı oluşturur.

FLAG_ACTIVITY_SINGLE_TOP

Başlatılan etkinlik, arka yığının en üstünde olan geçerli etkinlikse mevcut örnek, etkinliğin yeni bir örneğini oluşturmak yerine onNewIntent() çağrısı alır.

Bu durumda, önceki bölümde açıklanan "singleTop" launchMode değeriyle aynı davranış gerçekleştirilir.

FLAG_ACTIVITY_CLEAR_TOP

Başlatılan etkinlik mevcut görevde zaten çalışıyorsa sistem, bu etkinliğin yeni bir örneğini başlatmak yerine üzerindeki diğer tüm etkinlikleri kaldırır. Niyet, onNewIntent() boyunca en üstte olacak şekilde etkinliğin devam ettirilen örneğine iletilir.

Bu davranışı oluşturan launchMode özelliği için bir değer yoktur.

FLAG_ACTIVITY_CLEAR_TOP, çoğunlukla FLAG_ACTIVITY_NEW_TASK ile birlikte kullanılır. Birlikte kullanıldığında bu işaretler, başka bir görevdeki mevcut bir etkinliği bulur ve amaca yanıt verebileceği bir konuma yerleştirir.

Yakın ilgi alanlarını işleme

Yakın ilgi alanı, bir etkinliğin hangi göreve ait olmayı "tercih ettiğini" belirtir. Varsayılan olarak, aynı uygulamadaki tüm etkinlikler birbirlerine yakınlık gösterir: Aynı görevde olmayı "tercih ederler".

Ancak, bir etkinliğin varsayılan yakın ilgi alanını değiştirebilirsiniz. Farklı uygulamalarda tanımlanan etkinlikler aynı yakın ilgi alanını paylaşabilir ve aynı uygulamada tanımlanan etkinliklere farklı görev yakın ilgi alanları atanabilir.

Bir etkinliğin yakın ilgi alanını değiştirmek için <activity> öğesinin taskAffinity özelliğini kullanabilirsiniz.

taskAffinity özelliği, <manifest> öğesinde açıklanan varsayılan paket adından farklı olması gereken bir dize değeri alır. Bunun nedeni, sistem tarafından uygulama için varsayılan görev yakınlığını tanımlamak amacıyla bu adın kullanılmasıdır.

Bu benzeşim iki durumda devreye girer:

  1. Bir etkinlik başlatan niyet FLAG_ACTIVITY_NEW_TASK işaretini içerdiğinde.

    startActivity() adlı etkinliğin görevine varsayılan olarak yeni bir etkinlik başlatılır. Arayanla aynı arka yığına aktarılır.

    Bununla birlikte, startActivity() işlevine iletilen amaç FLAG_ACTIVITY_NEW_TASK işaretini içeriyorsa sistem, yeni etkinliği barındırmak için farklı bir görev arar. Çoğu zaman bu yeni bir görevdir. Ancak, bu böyle olmak zorunda değil. Yeni etkinlikle aynı yakın ilgiye sahip mevcut bir görev varsa etkinlik, söz konusu görevde başlatılır. Aksi takdirde yeni bir görev başlatılır.

    Bu işaret bir etkinliğin yeni görev başlatmasına neden oluyorsa ve kullanıcı bırakmak için Ana Sayfa düğmesini veya hareketi kullanıyorsa kullanıcının göreve geri dönebilmesinin bir yolu olmalıdır. Bildirim yöneticisi gibi bazı varlıklar, daima kendilerinin bir parçası olarak harici bir görevde etkinlik başlatır. Bu nedenle, startActivity()'a ilettikleri amaçlara her zaman FLAG_ACTIVITY_NEW_TASK eklerler.

    Bu işareti kullanabilecek harici bir varlık, etkinliğinizi çağırabiliyorsa kullanıcının başlatılan göreve geri dönmek için bağımsız bir yolu olduğundan (örneğin, görevin kök etkinliğinin CATEGORY_LAUNCHER amaç filtresine sahip olduğu bir başlatıcı simgesi) olduğundan emin olun. Daha fazla bilgi edinmek için görevleri başlatma ile ilgili bölüme göz atın.

  2. Bir etkinliğin allowTaskReparenting özelliği "true" olarak ayarlandığında.

    Bu durumda etkinlik, başladığı görevden ön plana geldiğinde ilgi alanı olduğu göreve geçebilir.

    Örneğin, belirli şehirlerdeki hava koşullarını bildiren bir etkinliğin bir seyahat uygulamasının parçası olarak tanımlandığını varsayalım. Aynı uygulamadaki diğer etkinliklerle aynı yakın ilgiye sahip olduğunu, varsayılan uygulama benzeşimini içerdiğini ve bu özellikle yeniden üstlenilebileceğini varsayalım.

    Etkinliklerinizden biri hava durumu muhabiri etkinliğine başladığında, bu başlangıçta etkinliğinizle aynı göreve aittir. Ancak seyahat uygulamasının görevi ön plana geldiğinde, hava durumu bildirenin etkinliği bu göreve yeniden atanır ve görevin içinde gösterilir.

Geri yığını temizle

Kullanıcı uzun süre bir görevden ayrılırsa sistem, kök etkinlik dışındaki tüm etkinliklerin görevini temizler. Kullanıcı göreve döndüğünde yalnızca kök etkinliği geri yüklenir. Sistem, uzun bir süre sonra kullanıcıların eskiden yaptıklarını terk ettiği ve yeni bir şeye başlamak için göreve geri döndüğü varsayımına dayanarak bu şekilde davranır.

Bu davranışı değiştirmek için kullanabileceğiniz bazı etkinlik özellikleri vardır:

alwaysRetainTaskState
Bu özellik, bir görevin kök etkinliğinde "true" olarak ayarlandığında az önce açıklanan varsayılan davranış gerçekleşmez. Görev, uzun bir süre sonra bile yığınındaki tüm etkinlikleri korur.
clearTaskOnLaunch

Bu özellik, bir görevin kök etkinliğinde "true" değerine ayarlandığında kullanıcı görevden ayrılıp göreve geri döndüğünde, görev kök etkinliğe indirilir. Başka bir deyişle, alwaysRetainTaskState işlevinin tersidir. Kullanıcı, görevden kısa bir süreliğine ayrıldıktan sonra bile her zaman göreve başlangıç durumunda döner.

finishOnTaskLaunch

Bu özellik clearTaskOnLaunch özelliğine benzer, ancak bir görevin tamamı yerine tek bir etkinlik üzerinde çalışır. Ayrıca, kök etkinliği haricindeki tüm etkinliklerin tamamlanmasına da neden olabilir. "true" olarak ayarlandığında etkinlik, yalnızca geçerli oturum için görevin bir parçası olarak kalır. Kullanıcı ayrılıp göreve geri dönerse görev artık mevcut değildir.

Görev başlatma

Bir etkinliği, belirtilen işlem "android.intent.action.MAIN" ve belirtilen kategori "android.intent.category.LAUNCHER" olacak şekilde bir amaç filtresi kullanarak görevin giriş noktası olarak oluşturabilirsiniz:

<activity ... >
    <intent-filter ... >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    ...
</activity>

Bu tür bir amaç filtresi, uygulama başlatıcıda etkinlik için bir simge ve etiketin görüntülenmesine neden olur. Böylece, kullanıcılara etkinliği başlatma ve başlatıldıktan sonra oluşturduğu göreve istedikleri zaman geri dönme olanağı sağlanır.

Bu ikinci yetenek önemlidir. Kullanıcılar bir görevden ayrılabilmeli ve daha sonra bu etkinlik başlatıcıyı kullanarak göreve geri dönebilmelidir. Bu nedenle, yalnızca etkinlikleri her zaman görev başlatıyor olarak işaretleyen iki başlatma modunu ve etkinliğin bir ACTION_MAIN ve CATEGORY_LAUNCHER filtresi varsa "singleTask" ve "singleInstance" kullanın.

Örneğin, filtre eksikse ne olabileceğini hayal edin: Niyet bir "singleTask" etkinliği başlatır, yeni bir görev başlatır ve kullanıcı bu görevde çalışmaya zaman ayırır. Kullanıcı, daha sonra ana sayfa düğmesini veya hareketini kullanır. Görev artık arka plana gönderiliyor ve görülemiyor. Görev, uygulama başlatıcıda temsil edilmediğinden artık kullanıcının göreve geri dönmesi mümkün değildir.

Kullanıcının bir etkinliğe dönmesini istemediğiniz durumlarda, <activity> öğesinin finishOnTaskLaunch değerini "true" olarak ayarlayın. Daha fazla bilgi için arka yığını temizleme ile ilgili bölüme bakın.

Görevlerin ve etkinliklerin Son Kullanılanlar ekranında nasıl temsil edildiği ve yönetildiği hakkında daha fazla bilgiyi Son aramalar ekranında bulabilirsiniz.

Diğer kaynaklar