Tugas dan Back-Stack

Sebuah aplikasi biasanya berisi beberapa aktivitas. Setiap aktivitas harus didesain dengan jenis aksi tertentu yang bisa dilakukan pengguna dan bisa memulai aktivitas lain. Misalnya, aplikasi email mungkin memiliki satu aktivitas untuk menampilkan daftar pesan baru. Bila pengguna memilih sebuah pesan, aktivitas baru akan terbuka untuk melihat pesan tersebut.

Aktivitas bahkan bisa memulai aktivitas yang ada dalam aplikasi lain di perangkat. Misalnya , jika aplikasi Anda ingin mengirim pesan email, Anda bisa mendefinisikan maksud untuk melakukan aksi "kirim" dan menyertakan sejumlah data, seperti alamat email dan pesan. Aktivitas dari aplikasi lain yang mendeklarasikan dirinya untuk menangani jenis maksud ini akan terbuka. Dalam hal ini, maksud tersebut untuk mengirim email, sehingga aktivitas "menulis" pada aplikasi email akan dimulai (jika beberapa aktivitas mendukung maksud yang sama, maka sistem akan memungkinkan pengguna memilih mana yang akan digunakan). Bila email telah dikirim, aktivitas Anda akan dilanjutkan dan seolah-olah aktivitas email adalah bagian dari aplikasi Anda. Meskipun aktivitas mungkin dari aplikasi yang berbeda, Android akan tetap mempertahankan pengalaman pengguna yang mulus dengan menjalankan kedua aktivitas dalam tugas yang sama.

Tugas adalah kumpulan aktivitas yang berinteraksi dengan pengguna saat melakukan tugas tertentu. Aktivitas tersebut diatur dalam tumpukan (back-stack), dalam urutan membuka setiap aktivitas.

Layar Utama perangkat adalah tempat memulai hampir semua tugas. Bila pengguna menyentuh ikon di peluncur aplikasi (atau pintasan pada layar Utama), tugas aplikasi tersebut akan muncul pada latar depan. Jika tidak ada tugas untuk aplikasi (aplikasi tidak digunakan baru-baru ini), maka tugas baru akan dibuat dan aktivitas "utama" untuk aplikasi tersebut akan terbuka sebagai aktivitas akar dalam tumpukan.

Bila aktivitas saat ini dimulai lagi, aktivitas baru akan didorong ke atas tumpukan dan mengambil fokus. Aktivitas sebelumnya tetap dalam tumpukan, namun dihentikan. Bila aktivitas dihentikan, sistem akan mempertahankan status antarmuka penggunanya saat ini. Bila pengguna menekan tombol Kembali , aktivitas saat ini akan dikeluarkan dari atas back-stack (aktivitas dimusnahkan) dan aktivitas sebelumnya dilanjutkan (status UI sebelumnya dipulihkan). Aktivitas dalam tumpukan tidak pernah disusun ulang, hanya didorong dan dikeluarkan dari tumpukan—yang didorong ke tumpukan saat dimulai oleh aktivitas saat ini dan dikeluarkan bila pengguna meninggalkannya menggunakan tombol Kembali. Dengan demikian, back-stack beroperasi sebagai struktur objek "masuk terakhir, keluar pertama". Gambar 1 melukiskan perilaku ini dengan kronologi yang menunjukkan kemajuan antar aktivitas beserta back-stack pada setiap waktu.

Gambar 1. Representasi tentang cara setiap aktivitas baru dalam tugas menambahkan item ke back-stack. Bila pengguna menekan tombol Kembali, aktivitas saat ini akan dimusnahkan dan aktivitas sebelumnya dilanjutkan.

Jika pengguna terus menekan Kembali, maka setiap aktivitas dalam tumpukan akan dikeluarkan untuk menampilkan yang sebelumnya, sampai pengguna kembali ke layar Utama (atau aktivitas mana pun yang sedang dijalankan saat tugas dimulai. Bila semua aktivitas telah dihapus dari tumpukan, maka tugas tidak akan ada lagi.

Gambar 2. Dua tugas: Tugas B menerima interaksi pengguna di latar depan, sedangkan Tugas A di latar belakang, menunggu untuk dilanjutkan.

Gambar 3. Satu aktivitas dibuat instance-nya beberapa kali.

Tugas adalah unit kohesif yang bisa dipindahkan ke "latar belakang" bila pengguna memulai tugas baru atau masuk ke layar Utama, melalui tombol Beranda. Sementara di latar belakang, semua aktivitas dalam tugas dihentikan, namun back-stack untuk tugas tidak berubah—tugas kehilangan fokus saat tugas lain berlangsung, seperti yang ditampilkan dalam gambar 2. Kemudian, tugas bisa kembali ke "latar depan" agar pengguna bisa melanjutkan tugas di tempat menghentikannya. Anggaplah, misalnya, tugas saat ini (Tugas A) memiliki tiga aktivitas dalam tumpukan—dua pada aktivitas saat ini. Pengguna menekan tombol Beranda , kemudian memulai aplikasi baru dari peluncur aplikasi. Bila muncul layar Utama, Tugas A akan beralih ke latar belakang. Bila aplikasi baru dimulai, sistem akan memulai tugas untuk aplikasi tersebut (Tugas B) dengan tumpukan aktivitas sendiri. Setelah berinteraksi dengan aplikasi tersebut, pengguna akan kembali ke Beranda lagi dan memilih aplikasi yang semula memulai Tugas A. Sekarang, Tugas A muncul di latar depan—ketiga aktivitas dalam tumpukan tidak berubah dan aktivitas di atas tumpukan akan dilanjutkan. Pada titik ini pengguna juga bisa beralih kembali ke Tugas B dengan masuk ke Beranda dan memilih ikon aplikasi yang memulai tugas tersebut (atau dengan memilih tugas aplikasi dari layar ringkasan). Ini adalah contoh dari melakukan multitasking di Android.

Catatan: Beberapa tugas bisa berlangsung di latar belakang secara bersamaan. Akan tetapi, jika pengguna menjalankan banyak tugas di latar belakang sekaligus, sistem mungkin mulai menghapus aktivitas latar belakang untuk memulihkan memori, yang akan menyebabkan status aktivitas hilang. Lihat bagian berikut tentang Status aktivitas.

Karena aktivitas di back-stack tidak pernah diatur ulang, jika aplikasi Anda memungkinkan pengguna untuk memulai aktivitas tertentu dari lebih dari satu aktivitas, instance baru aktivitas tersebut akan dibuat dan didorong ke tumpukan tersebut (bukannya memunculkan instance sebelumnya dari aktivitas ke atas). Dengan demikian, satu aktivitas pada aplikasi Anda mungkin dibuat instance-nya beberapa kali (bahkan dari beberapa tugas), seperti yang ditampilkan dalam gambar 3. Dengan demikian, jika pengguna mengarahkan mundur menggunakan tombol Kembali, setiap instance aktivitas ini akan ditampilkan dalam urutan saat dibuka (masing-masing dengan status UI sendiri). Akan tetapi, Anda bisa memodifikasi perilaku ini jika tidak ingin aktivitas dibuat instance-nya lebih dari sekali. Caranya dibahas di bagian selanjutnya tentang Mengelola Tugas.

Untuk meringkas perilaku default aktivitas dan tugas:

  • Bila Aktivitas A memulai Aktivitas B, Aktivitas A dihentikan, namun sistem mempertahankan statusnya (seperti posisi gulir dan teks yang dimasukkan ke dalam formulir). Jika pengguna menekan tombol Kembali saat dalam Aktivitas B, Aktivitas A akan dilanjutkan dengan status yang dipulihkan.
  • Bila pengguna meninggalkan tugas dengan menekan tombol Beranda aktivitas saat ini akan dihentikan dan tugas beralih ke latar belakang. Sistem akan mempertahankan status setiap aktivitas dalam tugas. Jika nanti pengguna melanjutkan tugas dengan memilih ikon peluncur yang memulai tugas, tugas tersebut akan beralih ke latar depan dan melanjutkan aktivitas di atas tumpukan.
  • Jika pengguna menekan tombol Kembali, aktivitas saat ini akan dikeluarkan dari tumpukan dan dimusnahkan. Aktivitas sebelumnya dalam tumpukan akan dilanjutkan. Bila suatu aktivitas dimusnahkan, sistem tidak akanmempertahankan status aktivitas.
  • Aktivitas bisa dibuat instance-nya beberapa kali, bahkan dari tugas-tugas lainnya.

Desain Navigasi

Untuk mengetahui selengkapnya tentang cara kerja navigasi aplikasi di Android, baca panduan Navigasi Desain Android.

Menyimpan Status Aktivitas

Seperti dibahas di atas, perilaku default sistem akan mempertahankan status aktivitas bila dihentikan. Dengan cara ini, bila pengguna mengarah kembali ke aktivitas sebelumnya, antarmuka pengguna akan muncul seperti saat ditinggalkan. Akan tetapi, Anda bisa—dan harus—secara proaktif mempertahankan status aktivitas menggunakan metode callback, jika aktivitas ini dimusnahkan dan harus dibuat kembali.

Bila sistem menghentikan salah satu aktivitas (seperti saat aktivitas baru dimulai atau tugas dipindah ke latar belakang), sistem mungkin memusnahkan aktivitas sepenuhnya jika perlu memulihkan memori sistem. Bila hal ini terjadi, informasi tentang status aktivitas akan hilang. Jika hal ini terjadi, sistem masih mengetahui bahwa aktivitas memiliki tempat di back-stack, namun saat aktivitas tersebut dibawa ke bagian teratas tumpukan, sistem harus membuatnya kembali (bukan melanjutkannya). Untuk menghindari hilangnya pekerjaan pengguna, Anda harus secara proaktif mempertahankannya dengan menerapkan metode callback onSaveInstanceState() dalam aktivitas.

Untuk informasi selengkapnya tentang cara menyimpan status aktivitas Anda, lihat dokumen Aktivitas.

Mengelola Tugas

Cara Android mengelola tugas dan back-stack, seperti yang dijelaskan di atas—dengan menempatkan semua aktivitas yang dimulai secara berurutan dalam tugas yang sama dan dalam tumpukan "masuk terakhir, keluar pertama"—berfungsi dengan baik untuk kebanyakan aplikasi dan Anda tidak perlu khawatir tentang cara mengaitkan aktivitas dengan tugas atau cara penempatannya di back-stack. Akan tetapi, Anda bisa memutuskan apakah ingin menyela perilaku normal. Mungkin Anda ingin agar suatu aktivitas dalam aplikasi untuk memulai tugas baru bila telah dimulai (sebagai ganti menempatkannya dalam tugas saat ini); atau, bila memulai aktivitas, Anda ingin memajukan instance yang ada (sebagai ganti membuat instance baru pada bagian teratas back-stack); atau, Anda ingin back-stack dihapus dari semua aktivitas selain untuk aktivitas akar bila pengguna meninggalkan tugas.

Anda bisa melakukan semua ini dan lainnya, dengan atribut dalam elemen manifes <activity> dan dengan flag pada maksud yang Anda teruskan ke startActivity().

Dalam hal ini, atribut <activity> utama yang bisa Anda gunakan adalah:

Dan flag maksud utama yang bisa Anda gunakan adalah:

Dalam bagian berikut, Anda akan melihat cara menggunakan beberapa atribut manifes ini dan flag maksud untuk mendefinisikan cara mengaitkan aktivitas dengan tugas dan cara perilakunya di back-stack.

Juga, pertimbangan cara menyatakan dan mengelola tugas dan aktivitas dibahas secara terpisah di layar ringkasan. Lihat Layar Ringkasan untuk informasi selengkapnya. Biasanya Anda harus mengizinkan sistem mendefinisikan cara menyatakan tugas dan aktivitas di layar ringkasan, dan Anda tidak perlu memodifikasi perilaku ini.

Perhatian: Kebanyakan aplikasi tidak harus menyela perilaku default untuk aktivitas dan tugas. Jika merasa bahwa aktivitas Anda perlu memodifikasi perilaku default, lakukan dengan hati-hati dan pastikan menguji kegunaan aktivitas selama dijalankan dan saat mengarahkan kembali ke sana dari aktivitas dan tugas lain dengan tombol Kembali. Pastikan menguji perilaku navigasi yang mungkin bertentangan dengan perilaku yang diharapkan pengguna.

Mendefinisikan mode peluncuran

Mode peluncuran memungkinkan Anda mendefinisikan cara mengaitkan instance baru dari suatu aktivitas dengan tugas saat ini. Anda bisa mendefinisikan beragam mode peluncuran dalam dua cara:

  • Menggunakan file manifes

    Bila Anda mendeklarasikan aktivitas dalam file manifes, Anda bisa menetapkan cara mengaitkan aktivitas dengan tugas-tugas saat mulai.

  • Menggunakan flag maksud

    Saat memanggilstartActivity(), Anda bisa menyertakan flag dalam Intent yang menyatakan cara (atau apakah) aktivitas baru tersebut harus dikaitkan dengan tugas saat ini.

Dengan demikian, jika Aktivitas A memulai Aktivitas B, Aktivitas B bisa mendefinisikan dalam manifesnya cara mengaitkan dengan tugas saat ini (jika sama sekali) dan Aktivitas A juga bisa meminta cara mengaitkan Aktivitas B dengan tugas saat ini. Jika kedua aktivitas mendefinisikan cara mengaitkan Aktivitas B dengan tugas, maka permintaan Aktivitas A (sebagaimana didefinisikan dalam maksud) lebih dihargai daripada permintaan Aktivitas B (sebagaimana didefinisikan dalam manifesnya).

Catatan: Beberapa mode peluncuran yang tersedia untuk file manifes tidak tersedia sebagai flag untuk maksud dan, juga, beberapa mode peluncuran yang tersedia sebagai flag untuk maksud tidak bisa didefinisikan dalam manifest.

Menggunakan file manifes

Saat mendeklarasikan aktivitas dalam file manifes, Anda bisa menetapkan cara mengaitkan aktivitas dengan tugas menggunakan <activity> melalui atribut launchMode elemen.

Atribut launchMode menetapkan instruksi tentang cara meluncurkan aktivitas ke dalam tugas. Ada empat macam mode peluncuran yang bisa Anda tetapkan ke atribut launchMode:

"standard" (mode default)
Default. Sistem membuat instance baru aktivitas dalam tugas yang akan menjadi tempat memulainya dan mengarahkan maksud ke sana. Aktivitas ini bisa dibuat instance-nya beberapa kali, masing-masing instance bisa dimiliki oleh tugas berbeda, dan satu tugas bisa memiliki beberapa instance.
"singleTop"
Jika instance aktivitas sudah ada di bagian teratas tugas saat ini, sistem akan mengarahkan maksud ke instance tersebut melalui panggilan ke metode onNewIntent(), bukan membuat instance baru dari aktivitas tersebut. Aktivitas bisa dibuat instance-nya beberapa kali, masing-masing instance bisa dimiliki oleh tugas berbeda, dan satu tugas bisa memiliki beberapa instance (namun hanya jika aktivitas di bagian teratas back-stack bukan instance yang ada dari aktivitas tersebut).

Misalnya, anggaplah back-stack tugas terdiri dari aktivitas A akar dengan aktivitas B, C, dan D di bagian teratas (tumpukan adalah A-B-C-D; D yang teratas). Sebuah maksud masuk untuk aktivitas tipe D. Jika D memiliki mode peluncuran "standard" default, instance baru dari kelas ini akan diluncurkan dan tumpukan menjadi A-B-C-D-D. Akan tetapi, jika mode peluncuran D adalah "singleTop", instance yang ada dari D akan menerima maksud melalui onNewIntent(), karena ada di bagian teratas tumpukan— tumpukan tetap A-B-C-D. Akan tetapi, jika maksud masuk untuk aktivitas tipe B, maka instance B baru akan ditambahkan ke tumpukan, sekalipun mode peluncuran adalah "singleTop".

Catatan: Bila instance dari aktivitas baru telah dibuat, pengguna bisa menekan tombol Kembali untuk kembali ke aktivitas sebelumnya. Namun bila instance yang ada dari aktivitas menangani maksud baru, pengguna tidak bisa menekan tombol Kembali untuk kembali ke status aktivitas sebelum maksud baru masuk di onNewIntent().

"singleTask"
Sistem membuat tugas baru dan membuat instance aktivitas di akar tugas baru. Akan tetapi, jika instance aktivitas sudah ada dalam tugas terpisah, sistem akan mengarahkan maksud ke instance yang ada melalui panggilan ke metode onNewIntent(), bukan membuat instance baru. Hanya boleh ada satu instance aktivitas untuk setiap kalinya.

Catatan: Meskipun aktivitas dimulai di tugas baru, tombol Kembali tetap akan mengembalikan pengguna ke aktivitas sebelumnya.

"singleInstance".
Sama seperti "singleTask", hanya saja sistem tidak meluncurkan aktivitas lain ke tugas yang menyimpan instance. Aktivitas selalu satu dan satu-satunya anggota dari tugasnya; aktivitas apa pun yang dimulai dengan ini akan dibuka di tugas yang terpisah.

Sebagai contoh lainnya, aplikasi Browser Android mendeklarasikan bahwa aktivitas browser web harus selalu dibuka dalam tugasnya sendiri—dengan menetapkan mode peluncuran singleTask dalam elemen <activity>. Ini berarti bahwa jika aplikasi Anda mengeluarkan maksud untuk membuka Browser Android, aktivitasnya tidak akan ditempatkan dalam tugas yang sama seperti aplikasi Anda. Sebagai gantinya, tugas baru akan dimulai untuk Browser atau, jika Browser sudah memiliki tugas yang berjalan di latar belakang, tugas tersebut akan dimajukan untuk menangani maksud baru.

Baik aktivitas dimulai dalam tugas baru maupun dalam tugas yang sama seperti aktivitas yang memulainya, tombol Kembali selalu membawa pengguna ke aktivitas sebelumnya. Akan tetapi, jika Anda memulai aktivitas yang menetapkan mode peluncuran singleTask, maka jika instance aktivitas tersebut ada dalam tugas latar belakang, seluruh tugas tersebut akan dibawa ke latar depan. Pada titik ini, back-stack sekarang menyertakan semua aktivitas dari tugas yang dimajukan, di atas tumpukan. Gambar 4 mengilustrasikan tipe skenario ini.

Gambar 4. Representasi tentang cara aktivitas dengan mode peluncuran "singleTask" ditambahkan ke back-stack. Jika aktivitas tersebut sudah menjadi bagian dari tugas latar belakang dengan back-stack sendiri, maka seluruh back-stack juga dimajukan, di atas tugas saat ini.

Untuk informasi selengkapnya tentang menggunakan mode peluncuran dalam file manifes, lihat dokumentasi elemen <activity>, di mana atribut launchMode dan nilai-nilai yang diterima akan dibahas selengkapnya.

Catatan: Perilaku yang Anda tetapkan untuk aktivitas dengan atribut launchMode bisa diganti dengan flag yang disertakan bersama maksud yang memulai aktivitas Anda, seperti dibahas di bagian berikutnya.

Menggunakan flag maksud

Saat memulai aktivitas, Anda bisa memodifikasi asosiasi default aktivitas pada tugasnya dengan menyertakan flag dalam maksud yang Anda kirimkan ke startActivity(). Flag yang bisa Anda gunakan untuk memodifikasi perilaku default adalah:

FLAG_ACTIVITY_NEW_TASK
Memulai aktivitas dalam tugas baru. Jika tugas sudah dijalankan untuk aktivitas yang sekarang Anda mulai, tugas tersebut akan dibawa ke latar depan dengan status terakhir yang dipulihkan dan aktivitas akan menerima maksud baru dalam onNewIntent().

Ini menghasilkan perilaku yang sama dengan nilai "singleTask" launchMode yang dibahas di bagian sebelumnya.

FLAG_ACTIVITY_SINGLE_TOP
Jika aktivitas yang dimulai adalah aktivitas saat ini (di bagian teratas back-stack), maka instance yang ada akan menerima panggilan ke onNewIntent() sebagai ganti membuat instance baru aktivitas.

Ini menghasilkan perilaku yang sama dengan nilai "singleTop" launchMode yang dibahas di bagian sebelumnya.

FLAG_ACTIVITY_CLEAR_TOP
Jika aktivitas yang dimulai sudah berjalan dalam tugas saat ini, maka sebagai ganti meluncurkan instance baru aktivitas tersebut, semua kegiatan lain di atasnya akan dimusnahkan dan maksud ini akan disampaikan ke instance aktivitas yang dilanjutkan (sekarang di atas), melalui onNewIntent()).

Tidak ada nilai untuk atribut launchMode yang menghasilkan perilaku ini.

FLAG_ACTIVITY_CLEAR_TOP paling sering digunakan bersama dengan FLAG_ACTIVITY_NEW_TASK. Bila digunakan bersama-sama, flag ini menjadi cara penempatan aktivitas yang ada dalam tugas lain dan menempatkannya dalam posisi yang memungkinkannya merespons maksud.

Catatan: Jika mode peluncuran aktivitas yang didesain adalah "standard", ini juga akan dibuang dari tumpukan dan instance baru akan diluncurkan untuk menggantikannya menangani maksud yang masuk. Itu sebabnya instance baru selalu dibuat untuk maksud baru bila mode peluncuran adalah "standard".

Menangani afinitas

Afinitas menunjukkan tugas mana yang disukai aktivitas untuk dimiliki. Secara default, semua aktivitas aplikasi yang sama memiliki afinitas untuk satu sama lain. Jadi, secara default, semua aktivitas dalam aplikasi yang sama lebih menyukai berada dalam tugas yang sama. Akan tetapi, Anda bisa memodifikasi afinitas default untuk suatu aktivitas. Aktivitas yang didefinisikan dalam aplikasi yang berbeda bisa berbagi afinitas, atau aktivitas yang didefinisikan dalam aplikasi yang sama bisa diberi afinitas tugas yang berbeda.

Anda bisa memodifikasi afinitas untuk setiap aktivitas yang diberikan dengan atribut taskAffinity dari elemen <activity>.

Atribut taskAffinity mengambil nilai string, yang harus unik dari nama paket default yang dideklarasikan dalam elemen <manifest> , karena sistem menggunakan nama itu untuk mengidentifikasi afinitas tugas default untuk aplikasi.

Afinitas berperan dalam dua keadaan:

  • Bila maksud yang meluncurkan aktivitas berisi flag FLAG_ACTIVITY_NEW_TASK.

    Aktivitas baru, secara default, diluncurkan ke dalam tugas aktivitas yang disebut startActivity(). Ini didorong ke back-stack yang sama seperti pemanggil. Akan tetapi, jika maksud yang diteruskan ke startActivity() berisi flag FLAG_ACTIVITY_NEW_TASK , maka sistem akan mencari tugas yang berbeda untuk menampung aktivitas baru. Sering kali, itu adalah tugas baru. Akan tetapi, tidak harus demikian. Jika sudah ada tugas lama dengan afinitas yang sama seperti aktivitas baru, aktivitas ini akan diluncurkan ke dalam tugas tersebut. Jika tidak, tugas baru akan dimulai.

    Jika flag ini menyebabkan aktivitas memulai tugas baru dan pengguna menekan tombol Beranda untuk meninggalkannya, harus ada cara bagi pengguna untuk mengarahkan kembali ke tugas. Beberapa entitas (seperti pengelola notifikasi) selalu memulai aktivitas dalam tugas eksternal, tidak pernah sebagai bagian dari miliknya sendiri, jadi selalu menempatkan FLAG_ACTIVITY_NEW_TASK dalam maksud yang diteruskan ke startActivity(). Jika Anda memiliki aktivitas yang bisa dipanggil melalui entitas eksternal yang mungkin menggunakan flag ini, hati-hatilah karena pengguna memiliki cara independen untuk kembali ke tugas yang telah dimulai, seperti pada ikon peluncur (aktivitas akar dari tugas memiliki filter maksud CATEGORY_LAUNCHER; lihat bagian Memulai tugas di bawah ini).

  • Bila aktivitas memiliki atribut allowTaskReparenting sendiri yang disetel ke "true".

    Dalam hal ini, aktivitas bisa berpindah dari tugas yang dimulainya ke tugas yang afinitasnya dimilikinya, bila tugas tersebut di bawa ke latar depan.

    Misalnya, anggaplah sebuah aktivitas melaporkan kondisi cuaca di sejumlah kota terpilih yang didefinisikan sebagai bagian dari aplikasi perjalanan. Aktivitas memiliki afinitas yang sama dengan aktivitas lain dalam aplikasi yang sama (afinitas aplikasi default) dan aktivitas ini memungkinkan re-parenting dengan atribut ini. Bila salah satu aktivitas Anda memulai aktivitas laporan cuaca, awalnya aktivitas ini dimiliki oleh tugas yang sama dengan aktivitas Anda. Akan tetapi, bila tugas aplikasi perjalanan di bawa ke latar depan, aktivitas laporan cuaca akan ditetapkan kembali ke tugas itu dan ditampilkan di dalamnya.

Tip: Jika file .apk berisi lebih dari satu "aplikasi" dari sudut pandang pengguna, Anda mungkin perlu menggunakan atribut taskAffinity untuk menetapkan afinitas berbeda pada aktivitas yang terkait dengan setiap "aplikasi".

Menghapus back-stack

Jika pengguna meninggalkan tugas dalam waktu yang lama, sistem akan menghapus tugas semua aktivitas kecuali aktivitas akar. Bila pengguna kembali ke tugas itu lagi, hanya aktivitas akar yang akan dipulihkan. Sistem berperilaku seperti ini, karena, setelah sekian waktu, pengguna mungkin telah mengabaikan apa yang mereka kerjakan sebelum dan kembali ke tugas itu untuk memulai sesuatu yang baru.

Ada beberapa atribut aktivitas yang bisa Anda gunakan untuk memodifikasi perilaku ini:

alwaysRetainTaskState
Jika atribut ini disetel ke "true" dalam aktivitas akar suatu tugas, perilaku default yang baru dijelaskan tidak akan terjadi. Tugas akan mempertahankan semua aktivitas dalam tumpukan bahkan setelah sekian lama.
clearTaskOnLaunch
Jika atribut ini disetel ke "true" dalam aktivitas akar suatu tugas, tumpukan akan dihapus hingga aktivitas akar bila pengguna meninggalkan tugas dan kembali lagi. Dengan kata lain, ini adalah kebalikan dari alwaysRetainTaskState. Pengguna selalu kembali ke tugas dengan status awalnya, walaupun hanya sebentar meninggalkan tugas.
finishOnTaskLaunch
Atribut ini seperti clearTaskOnLaunch, namun beroperasi pada satu aktivitas, bukan pada keseluruhan tugas. Hal ini juga bisa menyebabkan aktivitas hilang, termasuk aktivitas akar. Bila ini disetel ke "true", aktivitas akan tetap menjadi bagian dari tugas hanya untuk sesi saat ini. Jika pengguna keluar dan kemudian kembali ke tugas tersebut, tugas tidak akan ada lagi.

Memulai tugas

Anda bisa menyiapkan aktivitas sebagai titik masuk untuk suatu tugas dengan memberinya filter maksud dengan "android.intent.action.MAIN" sebagai aksi yang ditetapkan dan "android.intent.category.LAUNCHER" sebagai kategori yang ditetapkan. Misalnya:

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

Filter maksud semacam ini akan menyebabkan ikon dan label untuk aktivitas ditampilkan dalam peluncur aplikasi, yang akan memberi cara kepada pengguna untuk meluncurkan aktivitas dan kembali ke tugas yang dibuatnya kapan saja setelah ia telah diluncurkan.

Kemampuan kedua ini penting: Pengguna harus bisa meninggalkan tugas dan kemudian kembali ke tugas tersebut nanti dengan menggunakan peluncur aktivitas ini. Karena itu, kedua mode peluncuran yang menandai aktivitas sebagai selalu memulai tugas, "singleTask" dan "singleInstance", hanya boleh digunakan bila aktivitas memiliki filter ACTION_MAIN dan CATEGORY_LAUNCHER. Bayangkan, misalnya, apa yang akan terjadi jika filter tidak ada: Sebuah maksud meluncurkan aktivitas "singleTask", memulai tugas baru, dan pengguna menghabiskan banyak waktu mengerjakan tugas tersebut. Pengguna kemudian menekan tombol Beranda. Tugas kini dikirim ke latar belakang dan tidak terlihat. Sekarang pengguna tidak memiliki cara untuk kembali ke tugas tersebut, karena tidak dinyatakan dalam peluncur aplikasi.

Untuk kasus-kasus di mana Anda tidak ingin pengguna bisa kembali ke aktivitas, setel elemen <activity> pada finishOnTaskLaunch ke "true" (lihat Menghapus back-stack).

Informasi lebih jauh tentang cara menyatakan dan mengelola tugas dan aktivitas dalam layar ringkasan tersedia dalam Layar Ringkasan.