Görevler ve arka yığın

Görev, kullanıcıların uygulamanızda bir şey yapmaya çalışırken etkileşimde bulunduğu etkinlikler koleksiyonudur. Bu etkinlikler, geri yığın adı verilen bir yığında, her bir etkinliğin açıldığı sırayla düzenlenir.

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

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

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

Geçerli etkinlik başka bir etkinlik başlattığında, yeni etkinlik yığının en üstüne itilir ve odağı alır. Önceki etkinlik yığında kalır ancak durdurulur. Bir etkinlik durdurulduğunda sistem, kullanıcı arayüzünün mevcut durumunu korur. Kullanıcı geri işlemi gerçekleştirdiğinde, mevcut etkinlik yığının tepesinden atlanır ve kaldırılır. Ö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 kullanıcı tarafından Geri düğmesi veya hareketiyle kapatılırken yığına itilip çıkartılmaz. Bu nedenle, arka yığın, son giren, ilk çıkar nesne yapısı olarak çalışır. Şekil 1'de, etkinliklerin bir arka yığına aktarıldığı ve atı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 eder.

Kullanıcı Geri'ye dokunmaya veya Geri hareketi yapmaya devam ettikçe, yığındaki her bir etkinlik, Ana ekrana veya görev başladığı sırada çalışmakta olan herhangi bir etkinliğe geri dönene kadar bir öncekini görüntülemek üzere atılır. Yığındaki tüm etkinlikler kaldırıldığında görev artık mevcut olmaz.

Kök başlatıcı etkinliklerinin geri dokunma davranışı

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

Kullanıcı bir kök başlatıcı etkinliğinden Geri'ye 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 tamamlar.
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 hareketi kullanarak bir uygulamadan çıkarken varsayılan sistem davranışıyla eşleşir.

Çoğu durumda bu davranış, kullanıcıların uygulamayı son durumdan tamamen yeniden başlatmak yerine hazır durumda 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, sistemin Geri dokunma hareketine müdahale eden herhangi bir bileşen yoksa otomatik olarak uygun sistem davranışına göre hareket eder.

Ancak, uygulamanız geri gezinme işlemini yapmak ve etkinliği tamamlamak için onBackPressed() öğesini geçersiz kılarsa uygulamanızı bitirmek yerine super.onBackPressed() üzerinden ç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 uygulamalarda daha tutarlı bir gezinme deneyimi sağlar.

Arka plan ve ön plan görevleri

Şekil 2. İki görev: B görevi kullanıcı etkileşimini ön planda alırken A görevi arka planda ve devam ettirilmeyi bekliyor.

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, görevdeki tüm etkinlikler durdurulur ancak görevin arka yığını bozulmadan kalır. Şekil 2'de gösterildiği gibi, başka bir görev gerçekleştirilirken göreve odaklanılmaz. Daha sonra bir görev ön plana geri dönebilir ve böylece kullanıcılar kaldıkları yerden devam edebilirler.

İkisi mevcut etkinliğin altında olmak üzere, yığınında üç etkinlik bulunan mevcut A görevi 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 geçer. Yeni uygulama başladığında, sistem kendi etkinlik yığınıyla birlikte o uygulama için bir görev başlatır (B görevi).

  2. Kullanıcı, bu uygulamayla etkileşimde bulunduktan sonra Ana sayfaya tekrar geri döner ve A görevini başlatan uygulamayı seçer.

    Şimdi A Görevi ön plana çıkıyor. Yığındaki üç etkinlik de aynı şekilde çalışır ve yığının en üstündeki işlem devam eder. Bu noktada kullanıcı, Ana sayfaya gidip söz konusu görevi başlatan uygulama simgesini seçerek veya Son kullanılanlar ekranından uygulamanın görevini seçerek B görevine de geri dönebilir.

Birden çok etkinlik örneği

Şekil 3. Tek bir etkinlik birden fazla kez örneklenebilir.

Arka yığındaki etkinlikler hiçbir zaman yeniden düzenlenmez. Uygulamanız kullanıcıların birden fazla etkinlikten belirli bir etkinliği başlatması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 nedenle, Şekil 3'te gösterildiği gibi, uygulamanızdaki bir etkinlik, 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 ve her biri kendi kullanıcı arayüzü durumuna sahip olacak şekilde gösterilir. 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 aynı anda çalıştığında sistem, görevleri her pencere için ayrı ayrı 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ı dönem bazında yönetir.

Yaşam döngüsü özeti

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

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

  • Kullanıcı Ana Sayfa düğmesini veya hareketi kullanarak bir görevden ayrıldığında mevcut etkinlik durdurulur ve görevi arka plana gider. 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 ettirirse görev ön plana geçer ve yığının en üstündeki işleme devam eder.

  • Kullanıcı Geri'ye dokunur veya Geri hareketi yaparsa mevcut etkinlik yığından çıkarılıp 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öreve, son gelen ilk çıkar yığınına yerleştirerek görevleri ve arka yığını yönetir. Bu, çoğu uygulama için son derece faydalıdır ve genellikle etkinliklerinizin görevlerle nasıl ilişkilendirileceği veya bunların arka yığınlarında nasıl yer alacağı konusunda endişelenmeniz gerekmez.

Ancak, normal davranışı kesintiye uğratmak istediğinize karar verebilirsiniz. Örneğin, uygulamanızdaki bir etkinliğin mevcut göreve gönderilmek yerine, başlatıldığında yeni bir göreve başlamasını isteyebilirsiniz. Alternatif olarak, bir etkinliği başlattığınızda arka yığının üstünde yeni bir örnek oluşturmak yerine bu etkinliğin mevcut bir örneğini öne çıkarmak isteyebilirsiniz. Alternatif olarak, 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ı yapmak için <activity> manifest öğesindeki özellikleri ve startActivity()'e ilettiğiniz amaçtaki işaretleri kullanabilirsiniz.

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şkilendirileceğ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ğı ele alınmaktadır.

Görevlerin ve etkinliklerin Son Kullanılanlar ekranında nasıl temsil edildiği ve yönetildiği de dikkate alınır. Normalde, görevin ve etkinliklerinizin Son'lar ekranında nasıl gösterileceğini sistemin tanımlamasına izin verirsiniz ve bu davranışı değiştirmeniz gerekmez. Daha fazla bilgi için Son aramalar ekranı bölümüne bakın.

Başlatma modlarını tanımlama

Başlatma modları, bir etkinliğin yeni örneğinin mevcut 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:

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şkilendirilebileceğini istemek için bir amaç işaretini kullanabilir.

Her iki etkinlik de B Etkinliği'nin bir görevle nasıl ilişkilendirildiğini tanımlarsa A Etkinliği'nin amaçta tanımlandığı şekliyle isteği, manifest dosyasında tanımlanan şekilde B Etkinliğinin isteği yerine dikkate alınır.

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

Manifest dosyanızda bir etkinliği tanımlarken <activity> öğesinin launchMode özelliğini kullanarak 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 halihazırda bir etkinlik örneği mevcutsa sistem, etkinliğin yeni bir örneğini oluşturmak yerine amacı onNewIntent() yöntemine çağrı üzerinden 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 bu yalnızca, arka yığının en üstündeki etkinlik etkinliğin mevcut bir örneği değilse geçerlidir).

    Örneğin, bir görevin arka yığınının, en üstte B, C ve D etkinlikleri olacak şekilde kök etkinliği A'dan oluştuğunu varsayalım (yani yığın A-B-C-D en üstte olacak şekilde). Bir amaç, D türü bir etkinlik için gelir. D, varsayılan "standard" başlatma moduna sahipse sınıfın yeni bir örneği başlatılır ve yığın A-B-C-D-D haline gelir. Bununla birlikte, D'nin başlatma modu "singleTop" ise mevcut D örneği, amacı onNewIntent() aracılığıyla alır. Bunun nedeni, yığının en üstünde olmasıdır. Böylece, grup A-B-C-D olarak kalmaya devam eder. Öte yandan, B türü bir etkinlik için 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 onNewIntent() yöntemine yapılan bir çağrı aracılığıyla niyeti mevcut örneğe yönlendirir. Bu arada, üzerindeki diğer tüm etkinlikler yok edilir.
  4. "singleInstance".
    Bu davranış "singleTask" örneğiyle aynıdır. Tek fark, sistemin örneği barındıran göreve başka herhangi bir etkinlik başlatmaması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, görevi oluşturan ilk etkinlik olarak çalıştırılabileceğinden bir görevde bu etkinliğin yalnızca bir örneği olabilir. singleTask başlatma modunun aksine, FLAG_ACTIVITY_MULTIPLE_TASK veya FLAG_ACTIVITY_NEW_DOCUMENT işareti ayarlanmışsa bu etkinlik 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. Bu durum, uygulamanız Android Tarayıcıyı açmak için bir niyet yayınlarsa söz konusu etkinliğin, uygulamanızla aynı göreve yerleştirilmediği anlamına gelir. Bunun yerine, Tarayıcı için yeni bir görev başlatılır veya Tarayıcı'nın arka planda ç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ı fark etmeksizin 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 söz konusu görev ön plana çıkarılır. Bu noktada, arka yığın, yığının en üst kısmına 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ünde öne çıkar.

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 etkinlik başlatırken, startActivity() için ilettiğiniz amaca işaretleri ekleyerek bir etkinliğin göreviyle varsayılan ilişkilendirmesini 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 zaten bir görev çalışıyorsa bu görev, son durumu geri yüklenerek ön plana getirilir ve etkinlik, yeni amacı onNewIntent() içinde alır.

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

FLAG_ACTIVITY_SINGLE_TOP

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

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

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. Amaç, onNewIntent() aracılığıyla etkinliğin devam ettirilen örneğine şimdi en üstte olacak şekilde iletilir.

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

FLAG_ACTIVITY_CLEAR_TOP, çoğunlukla FLAG_ACTIVITY_NEW_TASK ile birlikte kullanılır. Bu işaretler, birlikte kullanıldığında 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ı yönetme

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.

Sistem, uygulama için varsayılan görev yakın ilgi alanını tanımlamak için bu adı kullandığından taskAffinity özelliği, <manifest> öğesinde belirtilen varsayılan paket adından farklı olması gereken bir dize değeri alır.

Bu yakın ilgi iki durumda devreye girer:

  1. Bir etkinlik başlatan amaç 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 gruba aktarılır.

    Bununla birlikte, startActivity() öğesine 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 illa ki böyle olması gerekmiyor. Yeni etkinlikle aynı yakın ilgiye sahip bir görev varsa etkinlik bu göreve başlatılır. Uygun değilse yeni bir görev başlatır.

    Bu işaret, bir etkinliğin yeni bir görev başlatmasına neden oluyorsa ve kullanıcı bırakmak için Ana sayfa düğmesini veya hareketi kullanırsa kullanıcının göreve geri dönebileceği bir yol olması gerekir. Bildirim yöneticisi gibi bazı varlıklar, hiçbir zaman kendilerinin parçası olarak değil, her zaman harici bir görevde faaliyet başlatır. Bu nedenle, startActivity() adlı kullanıcıya ilettikleri amaçlara her zaman FLAG_ACTIVITY_NEW_TASK ifadesini 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 bir CATEGORY_LAUNCHER amaç filtresine sahip olduğu başlatıcı simgesiyle) emin olun. Daha fazla bilgi 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şlatıldığı görevden ön plana çıktığında ilgi gösterdiği göreve geçebilir.

    Örneğin, belirli şehirlerdeki hava koşullarını raporlayan bir etkinliğin bir seyahat uygulamasının parçası olarak tanımlandığını varsayalım. Aynı uygulamadaki diğer etkinliklerle aynı yakın ilgi alanına sahip olduğunu, varsayılan uygulama yakın ilgi alanını ve bu özellikle yeniden üst öğe haline getirilebileceğini varsayalım.

    Etkinliklerinizden biri hava durumu muhabiri etkinliğini başlattığında, bu etkinlik başlangıçta aktivitenizle 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 bu göreve içinde gösterilir.

Geri yığını temizle

Kullanıcı uzun süre bir görevden ayrılırsa sistem, bu görevi kök etkinlik dışındaki tüm etkinliklerden temizler. Kullanıcı göreve döndüğünde yalnızca kök etkinlik geri yüklenir. Sistem, uzun bir süre sonra kullanıcıların eski şeyleri yapmayı bırakıp yeni bir işe 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 aktiviteleri korur.
clearTaskOnLaunch

Bu özellik, 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ılsa bile her zaman göreve ilk durumunda döner.

finishOnTaskLaunch

Bu özellik clearTaskOnLaunch gibidir, ancak bütün bir görev yerine tek bir etkinlik üzerinde çalışır. Ayrıca, kök etkinliği dışında 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örevi başlatma

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

<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, etkinlik için uygulama başlatıcıda bir simge ve etiketin gösterilmesine neden olarak, kullanıcılara etkinliği başlatmaları ve lansmandan sonra istedikleri zaman etkinlik oluşturdukları göreve geri dönmeleri için bir yol sunar.

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

Örneğin, filtre eksikse neler olabileceğini hayal edin: Niyet bir "singleTask" etkinliği başlatarak 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. Uygulama başlatıcıda temsil edilmediğinden kullanıcının artık 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 özelliğini "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