Layar Terbaru, juga disebut layar Ringkasan, daftar tugas terbaru, atau layar aplikasi terbaru, adalah UI tingkat sistem yang mencantumkan aktivitas dan tugas yang baru saja diakses. Pengguna dapat menavigasi daftar, memilih tugas untuk dilanjutkan, atau menghapus tugas dari daftar dengan menggesernya.
Layar Terbaru menggunakan model yang berfokus pada dokumen—yang diperkenalkan di Android 5.0 (API level 21)—dengan beberapa instance aktivitas yang sama yang berisi dokumen berbeda dapat muncul sebagai tugas di layar Terbaru. Misalnya, Google Drive mungkin memiliki tugas untuk masing-masing beberapa dokumen Google. Setiap dokumen akan muncul sebagai tugas di layar Terbaru:
Contoh umum lainnya adalah saat pengguna menggunakan browser, 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:
Biasanya, Anda membiarkan sistem menentukan bagaimana tugas dan aktivitas Anda diwakili di layar Terbaru. Anda tidak perlu mengubah perilaku ini. Namun, aplikasi Anda dapat menentukan cara dan waktu aktivitas muncul di layar Terbaru.
Class
ActivityManager.AppTask
memungkinkan Anda mengelola tugas, dan tanda 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 memberi Anda kontrol lebih besar terhadap waktu dan cara dokumen dibuka atau dibuka kembali di layar Terbaru. Saat menggunakan atribut <activity>
, Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas yang ada untuk dokumen tersebut.
Menggunakan flag Intent untuk menambahkan tugas
Saat membuat dokumen baru untuk aktivitas, panggil metode
startActivity()
, yang meneruskan intent yang meluncurkan aktivitas ke dalamnya. Untuk menyisipkan jeda logis
agar sistem memperlakukan aktivitas Anda sebagai tugas baru di layar
Terbaru, teruskan
tanda FLAG_ACTIVITY_NEW_DOCUMENT
dalam metode addFlags()
Intent
yang meluncurkan
aktivitas.
Jika Anda 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
dibuka di lebih dari satu 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; } }
Saat aktivitas utama meluncurkan aktivitas baru, sistem akan menelusuri
tugas yang ada untuk tugas yang intent-nya cocok dengan nama komponen intent dan
data intent untuk aktivitas tersebut. Jika tugas tidak ditemukan, atau intent berisi
tanda FLAG_ACTIVITY_MULTIPLE_TASK
, tugas baru akan dibuat dengan aktivitas tersebut sebagai root-nya.
Jika sistem menemukan tugas yang intent-nya cocok dengan nama komponen intent dan
data intent, sistem akan memindahkan tugas tersebut ke depan dan meneruskan intent baru ke
onNewIntent()
.
Aktivitas baru mendapatkan intent dan membuat dokumen baru di layar Terbaru, seperti yang ditunjukkan dalam 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 selalu diluncurkan ke dalam 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. Hal ini sama dengan menetapkan flag
FLAG_ACTIVITY_NEW_DOCUMENT
tanpa menyetel flagFLAG_ACTIVITY_MULTIPLE_TASK
, seperti yang dijelaskan di bagian Menggunakan flag Intent untuk menambahkan tugas. always
- Aktivitas ini membuat tugas baru untuk dokumen, meskipun dokumen sudah dibuka. Menggunakan nilai ini sama dengan menetapkan flag
FLAG_ACTIVITY_NEW_DOCUMENT
danFLAG_ACTIVITY_MULTIPLE_TASK
. none
- Aktivitas tidak membuat tugas baru untuk dokumen. Layar Terbaru memperlakukan aktivitas seperti itu secara default. Kode ini menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.
never
- Aktivitas tidak membuat tugas baru untuk dokumen. Menetapkan nilai ini
akan menggantikan perilaku tanda
FLAG_ACTIVITY_NEW_DOCUMENT
danFLAG_ACTIVITY_MULTIPLE_TASK
. Jika salah satunya ditetapkan dalam intent, dan layar Terbaru menampilkan satu tugas untuk aplikasi, aplikasi akan dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.
Menghapus tugas
Secara default, tugas dokumen otomatis keluar dari layar Terbaru
saat 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 menyetel
atribut <activity>
android:excludeFromRecents
ke true
.
Anda dapat menetapkan jumlah maksimum tugas yang dapat disertakan oleh aplikasi di
layar Terbaru dengan menetapkan
atribut <activity>
android:maxRecents
ke
nilai bilangan bulat. Saat jumlah tugas maksimum tercapai,
tugas yang paling jarang digunakan akan menghilang dari layar Terbaru. Nilai defaultnya adalah 16,
dan nilai maksimumnya adalah 50 (25 pada perangkat dengan memori rendah). Nilai yang kurang
dari 1 tidak valid.
Menggunakan class AppTask untuk menghapus tugas
Pada aktivitas yang membuat tugas baru di layar Terbaru, Anda dapat
menentukan kapan harus menghapus tugas dan menyelesaikan semua aktivitas yang terkait dengannya
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(); }
Pertahankan tugas yang selesai
Jika Anda ingin mempertahankan tugas di layar Terbaru, meskipun aktivitasnya telah
selesai, teruskan
flag FLAG_ACTIVITY_RETAIN_IN_RECENTS
dalam metode
addFlags()
dari
intent yang meluncurkan aktivitas tersebut.
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 efek 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
.
Aktifkan berbagi URL terbaru (khusus Pixel)
Di perangkat Pixel yang menjalankan Android 12 atau yang lebih baru, pengguna dapat membagikan link ke konten web yang baru-baru ini dilihat langsung dari layar Terbaru. Setelah membuka konten dalam aplikasi, pengguna dapat menggeser ke layar Terbaru dan menemukan aplikasi tempat mereka melihat konten, lalu mengetuk tombol link untuk menyalin atau membagikan URL.
Aplikasi apa pun dapat mengaktifkan penautan Terbaru bagi pengguna dengan menyediakan UI web dan
mengganti
onProvideAssistContent()
,
seperti yang ditunjukkan dalam contoh berikut:
Kotlin
class MainActivity : AppCompatActivity() { protected fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } fun onProvideAssistContent(outContent: AssistContent) { super.onProvideAssistContent(outContent) outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")) } }
Java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void onProvideAssistContent(AssistContent outContent) { super.onProvideAssistContent(outContent); outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage")); } }