Layar Terbaru (disebut juga sebagai layar Ringkasan, daftar tugas terbaru, atau aplikasi terbaru) adalah UI tingkat sistem yang mencantumkan aktivitas dan tugas yang terakhir diakses. Pengguna dapat menavigasi daftar dan memilih tugas untuk dilanjutkan, atau pengguna dapat menghapus tugas dari daftar dengan menggesernya. Android 5.0 (API level 21) memperkenalkan model yang berorientasi dokumen, dalam hal ini beberapa instance aktivitas yang sama yang berisi berbagai dokumen dapat muncul sebagai tugas di layar Terbaru. Misalnya, Google Drive mungkin memiliki tugas tersendiri untuk beberapa dokumen Google. Setiap dokumen akan muncul sebagai tugas di layar Terbaru.

Gambar 1. Layar Terbaru yang menampilkan tiga dokumen Google Drive, masing-masing ditampilkan sebagai tugas terpisah.
Contoh umum lainnya adalah saat pengguna menggunakan browser mereka, lalu mengetuk Bagikan > Gmail. Layar Tulis aplikasi Gmail akan muncul. Mengetuk tombol Terbaru pada saat itu akan menampilkan Chrome dan Gmail berjalan sebagai tugas terpisah. Pada versi Android yang lebih lama, semua aktivitas muncul sebagai tugas tunggal, membuat tombol Kembali menjadi satu-satunya alat navigasi. Gambar 2 menunjukkan bagaimana layar Terbaru terlihat di Android 5.0 dan yang lebih baru, dibandingkan dengan versi platform yang lebih lama. Gambar di layar kiri untuk Android 5.0 dan yang lebih baru, sedangkan gambar di sebelah kanan menunjukkan tampilan pada versi Android lama.

Gambar 2. Layar Terbaru pada Android 5.0 dan yang lebih baru (kiri), dan pada versi yang lebih lama dari Android 5.0 (kanan).
Biasanya, Anda harus mengizinkan sistem untuk menentukan bagaimana tugas dan aktivitas Anda ditampilkan di layar Terbaru, dan perilaku ini tidak perlu diubah.
Namun, aplikasi Anda dapat menentukan bagaimana dan kapan aktivitas muncul di layarTerbaru. Class ActivityManager.AppTask
memungkinkan Anda mengelola tugas, dan flag aktivitas class Intent
memungkinkan Anda menentukan kapan aktivitas ditambahkan atau dihapus dari layar Terbaru. Selain itu, atribut
<activity>
memungkinkan Anda menetapkan perilaku dalam manifes.
Menambahkan Tugas ke Layar Terbaru
Menggunakan flag class Intent
untuk menambahkan tugas akan memberikan kontrol yang lebih optimal terhadap waktu dan cara membuka atau membuka ulang dokumen di layar Terbaru. Jika menggunakan atribut <activity>
, Anda dapat memilih antara selalu membuka dokumen di tugas baru atau menggunakan kembali tugas yang ada untuk dokumen tersebut.
Menggunakan flag Intent untuk menambahkan tugas
Saat membuat dokumen baru untuk aktivitas, Anda memanggil metode startActivity()
, lalu meneruskannya ke intent yang meluncurkan aktivitas tersebut. Untuk menyisipkan jeda logis agar sistem memperlakukan aktivitas Anda sebagai tugas baru di layar Terbaru, teruskan flag FLAG_ACTIVITY_NEW_DOCUMENT
dalam metode addFlags()
dari Intent
yang meluncurkan aktivitas.
Catatan: Flag FLAG_ACTIVITY_NEW_DOCUMENT
menggantikan flag FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
, yang tidak digunakan lagi sejak Android 5.0 (API level 21).
Jika menetapkan flag FLAG_ACTIVITY_MULTIPLE_TASK
saat membuat dokumen baru, sistem akan selalu membuat tugas baru dengan aktivitas target sebagai root.
Setelan ini memungkinkan dokumen yang sama untuk dibuka di beberapa tugas. Kode berikut menunjukkan cara aktivitas utama melakukan hal ini:
Kotlin
fun createNewDocument(view: View) { val newDocumentIntent = newDocumentIntent() if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) } startActivity(newDocumentIntent) } private fun newDocumentIntent(): Intent = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++) }
Java
public void createNewDocument(View view) { final Intent newDocumentIntent = newDocumentIntent(); if (useMultipleTasks) { newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); } startActivity(newDocumentIntent); } private Intent newDocumentIntent() { boolean useMultipleTasks = checkbox.isChecked(); final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, documentCounter++); return newDocumentIntent; } }
Catatan: Aktivitas yang diluncurkan dengan flag FLAG_ACTIVITY_NEW_DOCUMENT
harus memiliki nilai atribut (nilai default) android:launchMode="standard"
yang ditetapkan dalam manifes.
Jika aktivitas utama meluncurkan aktivitas baru, sistem akan menelusuri tugas yang ada untuk intent yang cocok dengan nama komponen intent dan data Intent untuk aktivitas tersebut. Jika tugas tidak ditemukan, atau intent berisi flag FLAG_ACTIVITY_MULTIPLE_TASK
, tugas baru akan dibuat dengan aktivitas tersebut sebagai root-nya. Jika ditemukan, tugas tersebut akan dibawa ke depan dan intent baru akan diteruskan ke onNewIntent()
.
Aktivitas baru mendapatkan intent dan membuat dokumen baru di layar Terbaru, seperti pada contoh berikut:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_new_document) documentCount = intent .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0) documentCounterTextView = findViewById(R.id.hello_new_document_text_view) setDocumentCounterText(R.string.hello_new_document_counter) } override fun onNewIntent(newIntent: Intent) { super.onNewIntent(newIntent) /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this Activity will be reused. */ setDocumentCounterText(R.string.reusing_document_counter) }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_new_document); documentCount = getIntent() .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0); documentCounterTextView = (TextView) findViewById( R.id.hello_new_document_text_view); setDocumentCounterText(R.string.hello_new_document_counter); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); /* If FLAG_ACTIVITY_MULTIPLE_TASK has not been used, this activity is reused to create a new document. */ setDocumentCounterText(R.string.reusing_document_counter); }
Menggunakan atribut aktivitas untuk menambahkan tugas
Suatu aktivitas juga dapat menentukan dalam manifesnya bahwa aktivitas tersebut akan selalu diluncurkan ke tugas baru menggunakan atribut <activity>
, android:documentLaunchMode
. Atribut tersebut memiliki empat nilai yang menghasilkan efek berikut saat pengguna membuka dokumen dengan aplikasi:
- "
intoExisting
" - Aktivitas menggunakan ulang tugas yang ada untuk dokumen. Ini sama dengan menyetel flag
FLAG_ACTIVITY_NEW_DOCUMENT
tanpa menyetel flagFLAG_ACTIVITY_MULTIPLE_TASK
, seperti yang dijelaskan dalam Menggunakan flag Intent untuk menambahkan tugas di atas. - "
always
" - Aktivitas membuat tugas baru untuk dokumen, meskipun jika dokumen tersebut sudah dibuka. Menggunakan nilai ini sama dengan menyetel flag
FLAG_ACTIVITY_NEW_DOCUMENT
danFLAG_ACTIVITY_MULTIPLE_TASK
. - "
none
" - Aktivitas tidak membuat tugas baru untuk dokumen. Layar Terbaru memperlakukan aktivitas seperti yang akan terjadi secara default: menampilkan tugas tunggal untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.
- "
never
" - Aktivitas tidak membuat tugas baru untuk dokumen. Menetapkan nilai ini akan mengganti perilaku flag
FLAG_ACTIVITY_NEW_DOCUMENT
danFLAG_ACTIVITY_MULTIPLE_TASK
, jika salah satu di antaranya disetel dalam intent, dan layar Terbaru akan menampilkan tugas tunggal untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.
Catatan: Untuk nilai selain none
dan never
, aktivitas harus ditetapkan dengan launchMode="standard"
. Jika atribut ini tidak ditentukan, documentLaunchMode="none"
akan digunakan.
Menghapus Tugas
Secara default, tugas dokumen otomatis dihapus dari layar Terbaru setelah aktivitasnya selesai. Anda dapat mengganti perilaku ini dengan class ActivityManager.AppTask
, dengan flag Intent
, atau dengan atribut
<activity>
.
Anda selalu dapat mengecualikan tugas dari layar Terbaru sepenuhnya dengan menetapkan atribut <activity>
, android:excludeFromRecents
ke true
.
Anda dapat menetapkan jumlah maksimum tugas yang dapat disertakan aplikasi Anda di layar Terbaru dengan menetapkan atribut <activity>
android:maxRecents
ke nilai bilangan bulat tertentu. Defaultnya adalah 16. Setelah jumlah tugas maksimum tercapai, tugas yang paling jarang digunakan akan dihapus dari layar Terbaru. Nilai maksimum android:maxRecents
adalah 50 (25 untuk perangkat dengan memori rendah); nilai yang kurang dari 1 dianggap tidak valid.
Menggunakan class AppTask untuk menghapus tugas
Dalam aktivitas yang membuat tugas baru di layar Terbaru, Anda dapat menentukan waktu untuk menghapus tugas dan menyelesaikan semua aktivitas yang terkait dengan memanggil metode finishAndRemoveTask()
.
Kotlin
fun onRemoveFromOverview(view: View) { // It is good pratice to remove a document from the overview stack if not needed anymore. finishAndRemoveTask() }
Java
public void onRemoveFromRecents(View view) { // The document is no longer needed; remove its task. finishAndRemoveTask(); }
Catatan: Menggunakan metode finishAndRemoveTask()
akan mengganti penggunaan tag FLAG_ACTIVITY_RETAIN_IN_RECENTS
yang dibahas di bawah ini.
Mempertahankan tugas yang telah selesai
Jika ingin menyimpan tugas di layar Terbaru meskipun aktivitasnya telah selesai, teruskan flag FLAG_ACTIVITY_RETAIN_IN_RECENTS
dalam metode addFlags()
pada Intent yang meluncurkan aktivitas.
Kotlin
private fun newDocumentIntent() = Intent(this, NewDocumentActivity::class.java).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT or android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS) putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()) }
Java
private Intent newDocumentIntent() { final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class); newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT | android.content.Intent.FLAG_ACTIVITY_RETAIN_IN_RECENTS); newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, getAndIncrement()); return newDocumentIntent; }
Untuk mendapatkan hasil yang sama, tetapkan atribut <activity>
android:autoRemoveFromRecents
ke false
. Nilai defaultnya adalah true
untuk aktivitas dokumen, dan false
untuk aktivitas reguler. Penggunaan atribut ini akan mengganti flag FLAG_ACTIVITY_RETAIN_IN_RECENTS
yang telah dibahas sebelumnya.
Kode contoh tambahan
Untuk mendownload aplikasi contoh tentang aplikasi yang berorientasi dokumen, lihat Contoh DocumentsCentricRecents dan Contoh Android DocumentCentricRelinquishIdentity.