Écran "Récents"

Écran "Recents" (Éléments récents), également appelé écran "Overview" (Aperçu), pour les tâches récentes ou l'écran des applications récentes, est une interface utilisateur au niveau du système qui répertorie les activités et tâches. L'utilisateur peut parcourir la liste, sélectionner une tâche reprendre ou supprimer une tâche de la liste en la balayant.

L'écran "Recents" (Éléments récents) utilise une interface centrée sur les documents d'assistance, intégré à Android 5.0 (API niveau 21), dans lequel plusieurs instances la même activité contenant des documents différents peut apparaître comme des tâches dans Écran "Récents". Par exemple, Google Drive peut proposer une tâche pour chacun plusieurs documents Google. Chaque document apparaît en tant que tâche dans la section écran:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
Écran "Recents" (Éléments récents) affichant deux fichiers Google Drive des documents, chacun représenté comme une tâche distincte.

Un autre exemple courant est lorsque l'utilisateur utilise son navigateur et qu'il appuie sur Partager > Gmail : L'écran Nouveau message de l'application Gmail s'affiche. En appuyant sur l'icône Le bouton "Récents" affiche alors Chrome et Gmail de manière distincte. tâches:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
Écran "Récents" affichant Chrome et Gmail en tant que tâches distinctes.

Normalement, vous laissez le système définir la façon dont vos tâches et activités dans l'écran "Recents" (Éléments récents). Vous n'avez pas besoin de le modifier comportemental. Toutefois, votre application peut déterminer quand et comment les activités apparaissent dans les Écran "Récents".

La ActivityManager.AppTask permet de gérer les tâches, ainsi que les indicateurs d'activité de Intent permet de spécifier quand une est ajoutée ou supprimée de l'écran "Récents". Par ailleurs, Les attributs <activity> vous permettent de définir le comportement dans le fichier manifeste.

Ajouter des tâches à l'écran "Récents"

Utiliser les options de la classe Intent pour : ajouter une tâche vous permet de mieux contrôler quand et comment un document s'ouvre ou rouverte dans l'écran "Récents". Lorsque vous utilisez la <activity>, vous pouvez choisir d'ouvrir toujours le document dans une nouvelle tâche ou de réutiliser un document existant pour le document.

Utiliser l'indicateur d'intent pour ajouter une tâche

Lorsque vous créez un document pour votre activité, vous appelez la méthode startActivity() en lui transmettant l'intent qui lance l'activité. Pour insérer un opérateur logique pour que le système traite votre activité comme une nouvelle tâche à l'écran, transmettez FLAG_ACTIVITY_NEW_DOCUMENT indicateur dans le addFlags() du Intent qui lance la activité.

Si vous définissez FLAG_ACTIVITY_MULTIPLE_TASK lorsque vous créez le document, le système crée toujours une nouvelle tâche avec l'activité cible en tant que racine. Avec ce paramètre, le même document ouvert dans plusieurs tâches. Le code suivant montre comment effectue cette opération:

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

}

Lorsque l'activité principale lance une nouvelle activité, le système effectue une recherche dans des tâches existantes dont l'intent correspond au nom du composant d'intent et au des données d'intent pour l'activité. Si la tâche est introuvable ou si l'intent est contenu l'/le/la FLAG_ACTIVITY_MULTIPLE_TASK , une tâche est créée avec l'activité comme racine.

Si le système trouve une tâche dont l'intent correspond au nom du composant d'intent et les données d'intent, il met cette tâche au premier plan et transmet le nouvel intent à onNewIntent() La nouvelle activité récupère l'intent et crée un document dans la section "Recents" (Éléments récents). écran, comme illustré dans l'exemple suivant:

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

Utiliser l'attribut activity pour ajouter une tâche

Une activité peut également spécifier dans son fichier manifeste qu'elle se lance systématiquement dans une nouvelle tâche à l'aide de la commande <activity> l'attribut android:documentLaunchMode. Cet attribut comporte quatre valeurs. Voici ce qui se produit lorsque l'utilisateur ouvre un document avec l'application:

intoExisting
L'activité réutilise une tâche existante pour le document. Cela revient à définir FLAG_ACTIVITY_NEW_DOCUMENT option sans définir FLAG_ACTIVITY_MULTIPLE_TASK , comme décrit dans les Utiliser l'option Intent pour ajouter une tâche.
always
L'activité crée une tâche pour le document, même s'il est déjà ouvert. Utiliser cette valeur revient à définir à la fois options FLAG_ACTIVITY_NEW_DOCUMENT et FLAG_ACTIVITY_MULTIPLE_TASK.
none
L'activité ne crée pas de tâche pour le document. Les éléments récents l'écran traite l'activité comme il le ferait par défaut. Il affiche une seule tâche pour l'application, qui reprend à partir de n'importe quelle activité appelée en dernier par l'utilisateur.
never
L'activité ne crée pas de tâche pour le document. Définir cette valeur remplace le comportement FLAG_ACTIVITY_NEW_DOCUMENT et FLAG_ACTIVITY_MULTIPLE_TASK options. Si l'un de ces éléments est défini dans l'intent et que l'écran "Recents" (Éléments récents) affiche une seule tâche pour l'application, elle reprend à partir de n'importe quelle activité dernier appel de l'utilisateur.

Supprimer des tâches

Par défaut, une tâche liée au document se ferme automatiquement de l'écran "Éléments récents". lorsque son activité se termine. Vous pouvez ignorer ce comportement à l'aide de la méthode ActivityManager.AppTask , avec un indicateur Intent ou avec un attribut <activity>.

Vous pouvez toujours exclure complètement une tâche de l'écran "Applications récentes" en définissant Attribut <activity> android:excludeFromRecents à true.

Vous pouvez définir le nombre maximal de tâches que votre application peut inclure dans le l'écran "Récents" en définissant Attribut <activity> android:maxRecents à un et un nombre entier. Lorsque le nombre maximal de tâches est atteint, la tâche la plus récemment utilisée disparaît de l'écran "Recents" (Éléments récents). La valeur par défaut est 16, et la valeur maximale est 50 (25 sur les appareils à faible mémoire). Valeur inférieure supérieur à 1 ne sont pas valides.

Utiliser la classe AppTask pour supprimer des tâches

Dans l'activité qui crée une tâche de l'écran "Recents" (Éléments récents), vous pouvez : spécifier quand supprimer la tâche et terminer toutes les activités qui lui sont associées en en appelant la méthode finishAndRemoveTask() méthode:

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

Conserver les tâches terminées

Si vous souhaitez conserver une tâche dans l'écran "Actions récentes", même si son activité a terminé, transmettez la FLAG_ACTIVITY_RETAIN_IN_RECENTS dans la section Méthode addFlags() de qui lance l'activité.

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

Pour obtenir le même effet, définissez la Attribut <activity> android:autoRemoveFromRecents à false. La valeur par défaut est true pour les activités liées aux documents et false pour les activités régulières. L'utilisation de cet attribut remplace FLAG_ACTIVITY_RETAIN_IN_RECENTS.

Activer le partage d'URL pour les éléments récents (Pixel uniquement)

Sur les appareils Pixel fonctionnant sous Android 12 ou version ultérieure, les utilisateurs peuvent partager des liens au contenu Web récemment consulté, directement depuis l'écran "Récents". Après la visite contenu dans une application, l'utilisateur peut balayer l'écran jusqu'à l'écran "Récents" et trouver l'application où ils ont regardé le contenu, puis appuyez sur le bouton "Lien" pour copier ou partager URL.

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
Écran "Récents" avec un lien à partager contenu Web consulté récemment

Toute application peut activer l'association des applications récentes pour les utilisateurs en fournissant une interface utilisateur Web et remplacement onProvideAssistContent(), comme illustré dans l'exemple suivant:

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