Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Layar Terbaru

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.

Tampilan layar Terbaru versi sebelum Android 5.0 dibandingkan dengan versi lebih 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

DocumentCentricActivity.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

NewDocumentActivity.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 flag FLAG_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 dan FLAG_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 dan FLAG_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

NewDocumentActivity.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

DocumentCentricActivity.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.