L'écran "Recents" (Éléments récents), également appelé "Overview" (Aperçu), "Recent Tasks" (Liste des tâches récentes) ou "Recent Apps" (Applications récentes), est une interface utilisateur au niveau du système qui répertorie les activités et tâches récemment consultées. L'utilisateur peut parcourir la liste, sélectionner une tâche à reprendre ou supprimer une tâche de la liste en la faisant glisser.
L'écran "Recents" (Éléments récents) utilise un modèle centré sur les documents, introduit dans Android 5.0 (niveau d'API 21), dans lequel plusieurs instances de la même activité contenant différents documents peuvent apparaître en tant que tâches dans l'écran "Recents" (Éléments récents). Par exemple, Google Drive peut avoir une tâche pour chacun des plusieurs documents Google. Chaque document apparaît sous la forme d'une tâche sur l'écran "Recents" (Éléments récents) :
Autre exemple courant : lorsque l'utilisateur se sert de son navigateur et qu'il appuie sur Partager > Gmail. L'écran Nouveau message de l'application Gmail s'affiche. Si vous appuyez sur le bouton "Récents", Chrome et Gmail s'exécutent comme des tâches distinctes:
Normalement, vous laissez le système définir la manière dont vos tâches et activités sont représentées dans l'écran "Recents" (Éléments récents). Vous n'avez pas besoin de modifier ce comportement. Cependant, votre application peut déterminer comment et quand les activités s'affichent dans l'écran "Recents" (Éléments récents).
La classe ActivityManager.AppTask
vous permet de gérer des tâches, et les indicateurs d'activité de la classe Intent
vous permettent de spécifier quand une activité est ajoutée ou supprimée de l'écran "Recents" (Éléments récents). En outre, les attributs <activity>
vous permettent de définir le comportement dans le fichier manifeste.
Ajouter des tâches à l'écran "Recents" (Éléments récents)
L'utilisation des indicateurs de la classe Intent
pour ajouter une tâche vous permet de mieux contrôler quand et comment un document est ouvert ou rouvert dans l'écran "Recents" (Éléments récents). Lorsque vous utilisez les attributs <activity>
, vous pouvez choisir de toujours ouvrir le document dans une nouvelle tâche ou de réutiliser une tâche existante 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 une pause logique afin que le système traite votre activité comme une nouvelle tâche dans l'écran "Recents" (Éléments récents), transmettez l'option FLAG_ACTIVITY_NEW_DOCUMENT
dans la méthode addFlags()
du Intent
qui lance l'activité.
Si vous définissez l'option FLAG_ACTIVITY_MULTIPLE_TASK
lorsque vous créez le document, le système crée toujours une tâche avec l'activité cible comme racine. Ce paramètre permet d'ouvrir le même document
dans plusieurs tâches. Le code suivant montre comment l'activité principale 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 recherche dans les tâches existantes celle dont l'intent correspond au nom du composant d'intent et aux données d'intent de l'activité. Si la tâche est introuvable ou si l'intent contenait l'indicateur 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 aux données de l'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 sur l'écran "Recents" (Éléments récents), 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 d'activité pour ajouter une tâche
Une activité peut également spécifier dans son fichier manifeste qu'elle lance toujours une nouvelle tâche à l'aide de l'attribut <activity>
android:documentLaunchMode
.
Cet attribut présente quatre valeurs, ce qui entraîne les effets suivants 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 l'option
FLAG_ACTIVITY_NEW_DOCUMENT
sans définir l'optionFLAG_ACTIVITY_MULTIPLE_TASK
, comme décrit dans la section Utiliser l'indicateur d'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. L'utilisation de cette valeur revient à définir les options
FLAG_ACTIVITY_NEW_DOCUMENT
etFLAG_ACTIVITY_MULTIPLE_TASK
. none
- L'activité ne crée pas de tâche pour le document. L'écran "Recents" (Éléments récents) traite l'activité comme il le ferait par défaut. Il affiche une seule tâche pour l'application, qui reprend à partir de la dernière activité appelée par l'utilisateur.
never
- L'activité ne crée pas de tâche pour le document. La définition de cette valeur remplace le comportement des options
FLAG_ACTIVITY_NEW_DOCUMENT
etFLAG_ACTIVITY_MULTIPLE_TASK
. 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 la dernière activité appelée par l'utilisateur.
Supprimer des tâches
Par défaut, une tâche de document quitte automatiquement l'écran "Recents" (Éléments récents) lorsque son activité est terminée. Vous pouvez ignorer ce comportement avec la classe ActivityManager.AppTask
, avec un indicateur Intent
ou avec un attribut <activity>
.
Vous pouvez toujours exclure complètement une tâche de l'écran "Recents" (Éléments récents) en définissant l'attribut <activity>
android:excludeFromRecents
sur true
.
Vous pouvez définir le nombre maximal de tâches que votre application peut inclure dans l'écran "Recents" (Éléments récents) en définissant l'attribut <activity>
android:maxRecents
sur une valeur entière. Lorsque le nombre maximal de tâches est atteint, la tâche la moins 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). Les valeurs inférieures à 1 ne sont pas valides.
Utiliser la classe AppTask pour supprimer des tâches
Dans l'activité qui crée une tâche sur 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 appelant la méthode 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(); }
Conserver les tâches terminées
Si vous souhaitez conserver une tâche dans l'écran "Recents" (Éléments récents), même si son activité est terminée, transmettez l'indicateur FLAG_ACTIVITY_RETAIN_IN_RECENTS
dans la méthode addFlags()
de l'intent 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 l'attribut <activity>
android:autoRemoveFromRecents
sur false
. La valeur par défaut est true
pour les activités de document et false
pour les activités régulières. L'utilisation de cet attribut remplace l'option FLAG_ACTIVITY_RETAIN_IN_RECENTS
.
Activer le partage des URL récentes (Pixel uniquement)
Sur les appareils Pixel équipés d'Android 12 ou version ultérieure, les utilisateurs peuvent partager des liens vers du contenu Web récemment consulté directement depuis l'écran "Recents" (Éléments récents). Après avoir consulté le contenu dans une application, l'utilisateur peut balayer l'écran vers l'écran "Recents" (Éléments récents) et trouver l'application dans laquelle il a consulté le contenu, puis appuyer sur le bouton "Lien" pour copier ou partager l'URL.
Toute application peut activer l'association de contenus récents pour les utilisateurs en fournissant une interface utilisateur Web et en remplaçant 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")); } }