Layar terbaru

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:

Layar Terbaru yang menampilkan dua dokumen Google Drive, masing-masing ditampilkan sebagai tugas terpisah.

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:

Layar Terbaru yang menampilkan Chrome dan Gmail yang 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 flag FLAG_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 dan FLAG_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 dan FLAG_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.

Layar Terbaru dengan link untuk membagikan konten web yang baru-baru ini dilihat.

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"));
    }
}