Letzte Bildschirme

Der Bildschirm „Zuletzt verwendet“, auch Übersichtsbildschirm, Liste der letzten Aufgaben oder Bildschirm „Letzte Apps“ genannt, ist eine UI auf Systemebene, auf der die Aktivitäten und Aufgaben aufgelistet werden, auf die zuletzt zugegriffen wurde. Der Nutzer kann durch die Liste navigieren, eine Aufgabe zum Fortfahren auswählen oder eine Aufgabe aus der Liste entfernen, indem sie sie wegwischen.

Der Bildschirm „Zuletzt verwendet“ verwendet ein dokumentzentriertes Modell, das in Android 5.0 (API-Ebene 21) eingeführt wurde. Dabei können mehrere Instanzen derselben Aktivität, die unterschiedliche Dokumente enthält, als Aufgaben im Bildschirm „Zuletzt verwendet“ angezeigt werden. Beispielsweise kann es in Google Drive für jedes von mehreren Google-Dokumenten eine Aufgabe geben. Jedes Dokument wird auf dem Bildschirm „Zuletzt verwendet“ als Aufgabe angezeigt:

Auf dem Bildschirm „Zuletzt“ sind zwei Google Drive-Dokumente zu sehen, die jeweils als separate Aufgabe dargestellt werden.

Ein weiteres häufiges Beispiel ist, wenn ein Nutzer in einem Browser auf Teilen > Gmail tippt. Der Bildschirm Schreiben der Gmail App wird angezeigt. Wenn Sie dann auf die Schaltfläche „Zuletzt“ tippen, werden Chrome und Gmail als separate Aufgaben ausgeführt:

Bildschirm „Zuletzt verwendet“, auf dem Chrome und Gmail als separate Aufgaben ausgeführt werden.

Normalerweise lässt das System definieren, wie Ihre Aufgaben und Aktivitäten auf dem Bildschirm „Recents“ (Letzte) dargestellt werden. Sie müssen dieses Verhalten nicht ändern. Ihre App kann jedoch bestimmen, wie und wann Aktivitäten auf dem Bildschirm „Letzte“ angezeigt werden.

Mit der Klasse ActivityManager.AppTask können Sie Aufgaben verwalten. Mit den Aktivitäts-Flags der Klasse Intent können Sie festlegen, wann eine Aktivität auf dem Bildschirm „Letzte“ oder entfernt wird. Außerdem können Sie mit den <activity>-Attributen das Verhalten im Manifest festlegen.

Aufgaben zum Bildschirm „Letzte“ hinzufügen

Wenn Sie die Flags der Klasse Intent zum Hinzufügen einer Aufgabe verwenden, können Sie besser steuern, wann und wie ein Dokument im Bildschirm „Zuletzt verwendet“ geöffnet oder wieder geöffnet wird. Wenn Sie die <activity>-Attribute verwenden, können Sie auswählen, ob das Dokument immer in einer neuen Aufgabe geöffnet oder eine vorhandene Aufgabe für das Dokument wiederverwendet wird.

Aufgabe mit dem Intent-Flag hinzufügen

Wenn Sie ein neues Dokument für Ihre Aktivität erstellen, rufen Sie die Methode startActivity() auf und übergeben Sie den Intent, der die Aktivität startet, an sie. Wenn Sie eine logische Unterbrechung einfügen möchten, damit das System Ihre Aktivität auf dem Bildschirm „Letzte“ als neue Aufgabe behandelt, übergeben Sie das Flag FLAG_ACTIVITY_NEW_DOCUMENT in der Methode addFlags() des Intent, der die Aktivität startet.

Wenn Sie beim Erstellen des neuen Dokuments das Flag FLAG_ACTIVITY_MULTIPLE_TASK festlegen, erstellt das System immer eine neue Aufgabe mit der Zielaktivität als Stamm. Mit dieser Einstellung kann ein Dokument in mehreren Aufgaben geöffnet werden. Der folgende Code zeigt, wie dies bei der Hauptaktivität geschieht:

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

}

Wenn die Hauptaktivität eine neue Aktivität startet, durchsucht das System vorhandene Aufgaben nach einer Aufgabe, deren Intent mit dem Namen der Intent-Komponente und den Intent-Daten für die Aktivität übereinstimmt. Wenn die Aufgabe nicht gefunden wird oder der Intent das Flag FLAG_ACTIVITY_MULTIPLE_TASK enthielt, wird eine neue Aufgabe mit der Aktivität als Stamm erstellt.

Wenn das System eine Aufgabe findet, deren Intent mit dem Namen der Intent-Komponente und den Intent-Daten übereinstimmt, wird diese Aufgabe in den Vordergrund gestellt und der neue Intent an onNewIntent() übergeben. Die neue Aktivität ruft den Intent ab und erstellt ein neues Dokument im Bildschirm „Recents“ (Letzte), wie im folgenden Beispiel gezeigt:

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

Aufgabe mithilfe des Aktivitätsattributs hinzufügen

Eine Aktivität kann auch in ihrem Manifest angeben, dass sie immer in einer neuen Aufgabe gestartet wird. Dazu wird das Attribut <activity> android:documentLaunchMode verwendet. Dieses Attribut hat vier Werte, die folgende Auswirkungen haben, wenn der Nutzer ein Dokument in der Anwendung öffnet:

intoExisting
Die Aktivität verwendet eine vorhandene Aufgabe für das Dokument. Dies entspricht dem Festlegen des Flags FLAG_ACTIVITY_NEW_DOCUMENT ohne Angabe des Flags FLAG_ACTIVITY_MULTIPLE_TASK, wie im Abschnitt Aufgaben mit dem Intent-Flag hinzufügen beschrieben.
always
Durch die Aktivität wird eine neue Aufgabe für das Dokument erstellt, auch wenn das Dokument bereits geöffnet ist. Die Verwendung dieses Werts entspricht dem Festlegen der Flags FLAG_ACTIVITY_NEW_DOCUMENT und FLAG_ACTIVITY_MULTIPLE_TASK.
none
Durch die Aktivität wird keine neue Aufgabe für das Dokument erstellt. Der Bildschirm Recents behandelt die Aktivität wie standardmäßig. Es wird eine einzelne Aufgabe für die Anwendung angezeigt, die bei der letzten Aktivität des Nutzers fortgesetzt wird.
never
Durch die Aktivität wird keine neue Aufgabe für das Dokument erstellt. Wenn Sie diesen Wert festlegen, wird das Verhalten der Flags FLAG_ACTIVITY_NEW_DOCUMENT und FLAG_ACTIVITY_MULTIPLE_TASK überschrieben. Wenn eine dieser Optionen im Intent festgelegt ist und auf dem Bildschirm „Recents“ (Zuletzt verwendet) eine einzelne Aufgabe für die App angezeigt wird, wird diese ab der vom Nutzer zuletzt aufgerufenen Aktivität fortgesetzt.

Aufgaben entfernen

Standardmäßig wird eine Dokumentaufgabe automatisch aus dem Bildschirm „Zuletzt verwendet“ ausgeblendet, wenn die Aktivität abgeschlossen ist. Sie können dieses Verhalten mit der Klasse ActivityManager.AppTask, einem Intent-Flag oder einem <activity>-Attribut überschreiben.

Sie können eine Aufgabe jederzeit vollständig vom Bildschirm „Zuletzt“ ausschließen. Dazu setzen Sie das Attribut <activity> android:excludeFromRecents auf true.

Sie können auf dem Bildschirm „Zuletzt“ die maximale Anzahl von Aufgaben festlegen, die Ihre App enthalten darf. Dazu setzen Sie das Attribut <activity> android:maxRecents auf eine Ganzzahl. Wenn die maximale Anzahl von Aufgaben erreicht ist, verschwindet die am wenigsten verwendete Aufgabe vom Bildschirm „Recents“. Der Standardwert ist 16 und der Maximalwert ist 50 (25 auf Geräten mit wenig Speicher). Werte unter 1 sind ungültig.

Aufgaben mithilfe der AppTask-Klasse entfernen

In der Aktivität, mit der auf dem Bildschirm „Zuletzt“ eine neue Aufgabe erstellt wird, können Sie angeben, wann die Aufgabe entfernt und alle damit verbundenen Aktivitäten beendet werden sollen. Dazu rufen Sie die Methode finishAndRemoveTask() auf:

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

Erledigte Aufgaben aufbewahren

Wenn Sie eine Aufgabe auf dem Bildschirm „Zuletzt“ beibehalten möchten, auch wenn die Aktivität abgeschlossen ist, übergeben Sie das Flag FLAG_ACTIVITY_RETAIN_IN_RECENTS in der Methode addFlags() des Intents, der die Aktivität startet.

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

Setzen Sie das Attribut <activity> android:autoRemoveFromRecents auf false, um denselben Effekt zu erzielen. Der Standardwert ist true für Dokumentaktivitäten und false für normale Aktivitäten. Die Verwendung dieses Attributs überschreibt das Flag FLAG_ACTIVITY_RETAIN_IN_RECENTS.

Freigabe der letzten URL aktivieren (nur Pixel)

Auf Pixel-Geräten mit Android 12 oder höher können Nutzer Links zu zuletzt angesehenen Webinhalten direkt auf dem Bildschirm „Zuletzt verwendet“ teilen. Nachdem der Nutzer den Inhalt in einer App aufgerufen hat, kann er zum Bildschirm „Zuletzt verwendet“ wischen und die App suchen, in der er sich die Inhalte angesehen hat. Tippen Sie dann auf die Schaltfläche „Link“, um die URL zu kopieren oder zu teilen.

Der Bildschirm „Zuletzt verwendet“ mit einem Link zum Teilen kürzlich angesehener Webinhalte.

Jede Anwendung kann „Recents“-Verknüpfungen für Nutzer aktivieren. Dazu stellen Sie eine Web-UI bereit und überschreiben onProvideAssistContent(), wie im folgenden Beispiel gezeigt:

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