Layar Ringkasan

Layar ringkasan (juga disebut sebagai layar terbaru, daftar tugas terbaru, atau aplikasi terbaru) UI tingkat sistem yang mencantumkan aktivitas dan tugas yang baru saja diakses. Pengguna bisa menyusuri daftar ini dan memilih satu tugas untuk dilanjutkan, atau pengguna bisa membuang tugas dari daftar dengan gerakan mengusap. Dengan dirilisnya Android 5.0 (API level 21), beberapa instance aktivitas yang sama yang berisi dokumen berbeda dapat muncul sebagai tugas di layar ringkasan. Misalnya, Google Drive mungkin memiliki satu tugas untuk setiap beberapa dokumen Google. Setiap dokumen muncul sebagai tugas dalam layar ringkasan.

Gambar 1. Layar ringkasan menampilkan tiga dokumen Google Drive, masing-masing dinyatakan sebagai tugas terpisah.

Biasanya Anda harus mengizinkan sistem mendefinisikan cara menyatakan tugas dan aktivitas di layar ringkasan, dan Anda tidak perlu memodifikasi perilaku ini. Akan tetapi, aplikasi Anda dapat menentukan cara dan waktu munculnya aktivitas di layar ringkasan. Kelas ActivityManager.AppTask memungkinkan Anda mengelola tugas, dan flag aktivitas kelas Intent memungkinkan Anda menentukan kapan aktivitas ditambahkan atau dihapus dari layar ringkasan. Selain itu, atribut <activity> memungkinkan Anda menetapkan perilaku di manifes.

Menambahkan Tugas ke Layar Ringkasan

Penggunaan flag kelas Intent untuk menambahkan tugas memberi kontrol lebih besar atas waktu dan cara dokumen dibuka atau dibuka kembali di layar ringkasan. Bila menggunakan atribut <activity> , Anda dapat memilih antara selalu membuka dokumen dalam tugas baru atau menggunakan kembali tugas yang ada untuk dokumen tersebut.

Menggunakan flag Maksud untuk menambahkan tugas

Bila membuat dokumen baru untuk aktivitas, Anda memanggil metode startActivity() dari kelas ActivityManager.AppTask, dengan meneruskannya ke maksud yang menjalankan aktivitas tersebut. Untuk menyisipkan jeda logis agar sistem memperlakukan aktivitas Anda sebagai tugas baru di layar ringkasan, teruskan flag FLAG_ACTIVITY_NEW_DOCUMENT dalam metode addFlags() dari Intent yang memulai aktivitas itu.

Catatan: Flag FLAG_ACTIVITY_NEW_DOCUMENT menggantikan flag FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, yang tidak digunakan lagi pada Android 5.0 (API level 21).

Jika Anda menetapkan flag FLAG_ACTIVITY_MULTIPLE_TASK saat membuat dokumen baru, sistem akan selalu membuat tugas baru dengan aktivitas target sebagai akar. Dengan setelan ini, dokumen yang sama dapat dibuka di lebih dari satu tugas. Kode berikut memperagakan cara aktivitas utama melakukannya:

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 = mCheckbox.isChecked();
      final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
      newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
      newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
      return newDocumentIntent;
  }

  private static int incrementAndGet() {
      Log.d(TAG, "incrementAndGet(): " + mDocumentCounter);
      return mDocumentCounter++;
  }
}

Catatan: Aktivitas yang dimulai dengan flag FLAG_ACTIVITY_NEW_DOCUMENT harus telah menetapkan nilai atribut android:launchMode="standard" (default) yang disetel dalam manifes.

Bila aktivitas utama memulai aktivitas baru, sistem akan menelusuri tugas yang maksud -nya cocok dengan nama komponen maksud dalam tugas-tugas yang sudah ada dan menelusuri aktivitas dalam data Maksud. Jika tugas tidak ditemukan, atau maksud ada dalam flag FLAG_ACTIVITY_MULTIPLE_TASK , tugas baru akan dibuat dengan aktivitas tersebut sebagai akarnya. Jika ditemukan, sistem akan mengedepankan tugas itu dan meneruskan maksud baru ke onNewIntent(). Aktivitas baru akan mendapatkan maksud dan membuat dokumen baru di layar ringkasan, seperti dalam contoh berikut:

NewDocumentActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_document);
    mDocumentCount = getIntent()
            .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
    mDocumentCounterTextView = (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 activity untuk menambahkan tugas

Aktivitas juga bisa menetapkan dalam manifesnya agar selalu dimulai ke dalam tugas baru dengan menggunakan atribut <activity> , android:documentLaunchMode. Atribut ini memiliki empat nilai yang menghasilkan efek berikut bila pengguna membuka dokumen dengan aplikasi:

"intoExisting"
Aktivitas menggunakan kembali tugas yang ada untuk dokumen tersebut. Ini sama dengan menyetel flag FLAG_ACTIVITY_NEW_DOCUMENT tanpa menyetel flag FLAG_ACTIVITY_MULTIPLE_TASK, seperti dijelaskan dalam Menggunakan flag Maksud untuk menambahkan tugas, di atas.
"always"
Aktivitas ini membuat tugas baru untuk dokumen, meski dokumen sudah dibuka. Menggunakan nilai ini sama dengan menetapkan flag FLAG_ACTIVITY_NEW_DOCUMENT maupun FLAG_ACTIVITY_MULTIPLE_TASK.
"none”"
Aktivitas ini tidak membuat tugas baru untuk dokumen. Layar ringkasan memperlakukan aktivitas seperti itu secara default: satu tugas ditampilkan untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.
"never"
Aktivitas ini tidak membuat tugas baru untuk dokumen. Menyetel nilai ini akan mengganti perilaku flag FLAG_ACTIVITY_NEW_DOCUMENT dan FLAG_ACTIVITY_MULTIPLE_TASK, jika salah satunya ditetapkan di maksud, dan layar ringkasan menampilkan satu tugas untuk aplikasi, yang dilanjutkan dari aktivitas apa pun yang terakhir dipanggil pengguna.

Catatan: Untuk nilai selain none dan never, aktivitas harus didefinisikan dengan launchMode="standard". Jika atribut ini tidak ditetapkan, maka documentLaunchMode="none" akan digunakan.

Menghapus Tugas

Secara default, tugas dokumen secara otomatis dihapus dari layar ringkasan bila aktivitasnya selesai. Anda bisa mengganti perilaku ini dengan kelas ActivityManager.AppTask, dengan flag Intent atau atribut <activity>.

Kapan saja Anda bisa mengecualikan tugas dari layar ringkasan secara keseluruhan dengan menyetel atribut <activity> , android:excludeFromRecents ke true.

Anda bisa menyetel jumlah maksimum tugas yang bisa disertakan aplikasi Anda dalam layar ringkasan dengan menyetel atribut <activity> android:maxRecents ke satu nilai integer. Nilai default-nya adalah 16. Bila telah mencapai jumlah maksimum, tugas yang terakhir digunakan akan dihapus dari layar ringkasan. Nilai maksimum android:maxRecents adalah 50 (25 pada perangkat dengan memori sedikit); nilai yang kurang dari 1 tidak berlaku.

Menggunakan kelas AppTask untuk membuang tugas

Dalam aktivitas yang membuat tugas baru di layar ringkasan, Anda bisa menetapkan kapan membuang tugas dan menyelesaikan semua aktivitas yang terkait dengannya dengan memanggil metode finishAndRemoveTask().

NewDocumentActivity.java

public void onRemoveFromRecents(View view) {
    // The document is no longer needed; remove its task.
    finishAndRemoveTask();
}

Catatan: Penggunaan metode finishAndRemoveTask() akan mengganti penggunaan tag FLAG_ACTIVITY_RETAIN_IN_RECENTS, seperti dibahas di bawah ini.

Mempertahankan tugas yang telah selesai

Jika Anda ingin mempertahankan tugas di layar ringkasan, sekalipun aktivitas sudah selesai, teruskan flag FLAG_ACTIVITY_RETAIN_IN_RECENTS dalam metode addFlags() dari Maksud yang memulai aktivitas itu.

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, incrementAndGet());
    return newDocumentIntent;
}

Untuk memperoleh efek yang sama, setel atribut <activity> android:autoRemoveFromRecents ke false. Nilai default-nya adalah true untuk aktivitas dokumen, dan false untuk aktivitas biasa. Penggunaan atribut ini akan mengganti flag FLAG_ACTIVITY_RETAIN_IN_RECENTS, yang telah dibahas sebelumnya.