La pantalla Recents, también llamada Recientes, que incluye tareas recientes lista, o pantalla de apps recientes, es una IU a nivel del sistema que enumera actividades y tareas. El usuario puede navegar por la lista, seleccionar una tarea para reanudar o quitar una tarea de la lista deslizándola hacia afuera.
La pantalla Recientes usa una biblioteca centrada en el documento codificador-decodificador, introducido en Android 5.0 (API nivel 21), en la que varias instancias de la misma actividad, que contiene diferentes documentos, puede aparecer como tareas en el Pantalla Recientes. Por ejemplo, Google Drive podría tener una tarea para cada uno de varios documentos de Google. Cada documento aparece como una tarea en la carpeta Recientes pantalla:
Otro ejemplo común es cuando el usuario utiliza su navegador y presiona Compartir > Gmail. Aparece la pantalla Redactarde la app de Gmail. Al presionar El botón Recientes en ese momento muestra que Chrome y Gmail se ejecutan de forma independiente. tareas:
Por lo general, permites que el sistema defina cómo se gestionan tus tareas y actividades representados en la pantalla Recientes. No es necesario que modifiques el comportamiento de los usuarios. Sin embargo, tu app puede determinar cómo y cuándo aparecen las actividades en la Pantalla Recientes.
El
ActivityManager.AppTask
te permite administrar tareas, y las marcas de actividad de los
Intent
te permite especificar cuándo
agregar o quitar actividad de la pantalla Recientes. Además, el
Los atributos <activity>
te permiten establecer
el comportamiento en el manifiesto.
Cómo agregar tareas a la pantalla Recientes
Usa las marcas de la clase Intent
para
Agregar una tarea te permite tener más control sobre cuándo y cómo se abre o se abre un documento.
se volvió a abrir en la pantalla Recientes. Cuando uses
<activity>
, puedes
Puedes elegir entre abrir siempre el documento en una tarea nueva o reutilizar una existente
para el documento.
Cómo usar la marca de intent para agregar una tarea
Cuando creas un nuevo documento para tu actividad, llamas al
startActivity()
y pásale el intent que inicia la actividad. Para insertar un operador lógico
para que el sistema trate tu actividad como una tarea nueva en la carpeta Recientes
pantalla, pasa el
FLAG_ACTIVITY_NEW_DOCUMENT
marca en addFlags()
de la clase Intent
que inicia la
actividad.
Si estableces FLAG_ACTIVITY_MULTIPLE_TASK
cuando creas un documento nuevo, el sistema siempre crea una tarea nueva con
la actividad objetivo como la raíz. Este parámetro de configuración permite que el mismo documento
abierto en más de una tarea. El siguiente código demuestra cómo la principal
actividad hace esto:
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; } }
Cuando la actividad principal inicia una nueva actividad, el sistema busca
tareas existentes para una cuyo intent coincida con el nombre del componente del intent y el
de intents de la actividad. Si no se encuentra la tarea o no se encuentra el intent
FLAG_ACTIVITY_MULTIPLE_TASK
marca, se crea una tarea nueva con la actividad como raíz.
Si el sistema encuentra una tarea cuyo intent coincide con el nombre del componente del intent y
los datos del intent, trae esa tarea al frente y pasa el nuevo intent al
onNewIntent()
La nueva actividad obtiene el intent y crea un nuevo documento en la pestaña Recientes.
pantalla, como se muestra en el siguiente ejemplo:
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); }
Cómo usar el atributo de actividad para agregar una tarea
Una actividad también puede especificar en su manifiesto que siempre se inicia en un nuevo objeto
tarea con <activity>
atributo android:documentLaunchMode
.
Este atributo tiene cuatro valores que producen los siguientes efectos cuando el usuario
abre un documento con la aplicación:
intoExisting
- La actividad reutiliza una tarea existente para el documento, Esto es lo mismo que establecer
FLAG_ACTIVITY_NEW_DOCUMENT
marca sin configurarFLAG_ACTIVITY_MULTIPLE_TASK
marca, como se describe en el Sección de uso de la marca de intent para agregar una tarea. always
- La actividad crea una tarea nueva para el documento, incluso si este está
ya se abrió. Usar este valor equivale a establecer
Las marcas
FLAG_ACTIVITY_NEW_DOCUMENT
yFLAG_ACTIVITY_MULTIPLE_TASK
. none
- La actividad no crea una nueva tarea para el documento. Recientes la pantalla trata la actividad como lo haría de forma predeterminada. Muestra una sola tarea para la app, que se reanuda desde la última actividad que el usuario invocó.
never
- La actividad no crea una nueva tarea para el documento. Establece este valor
anula el comportamiento de la
FLAG_ACTIVITY_NEW_DOCUMENT
yFLAG_ACTIVITY_MULTIPLE_TASK
marcas. Si cualquiera de estos se establece en el intent y en la pantalla Recents, muestra una sola tarea para la app, se reanuda desde la actividad se invocó por última vez el usuario.
Cómo quitar tareas
De forma predeterminada, la tarea de un documento sale automáticamente de la pantalla Recientes
cuando finalice su actividad. Puedes anular este comportamiento con el
ActivityManager.AppTask
con una marca Intent
un atributo <activity>
Para excluir completamente una tarea de la pantalla Recientes, configura
el atributo <activity>
android:excludeFromRecents
a true
.
Puedes establecer la cantidad máxima de tareas que tu app puede incluir en la
pantalla Recientes estableciendo el
Atributo <activity>
android:maxRecents
a un
de un número entero. Cuando se alcanza la cantidad máxima de tareas,
la tarea menos utilizada recientemente desaparece de la pantalla Recientes. El valor predeterminado es 16,
y el valor máximo es 50 (25 en dispositivos con poca memoria). Valores menores
que 1 no son válidos.
Usa la clase AppTask para quitar tareas
En la actividad que crea una nueva tarea en la pantalla Recientes, puedes
especificar cuándo eliminar la tarea y finalizar todas las actividades asociadas a ella
llamando al
finishAndRemoveTask()
método:
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(); }
Retener las tareas finalizadas
Si quieres conservar una tarea en la pantalla Recientes, incluso si su actividad
terminado, pasa el
FLAG_ACTIVITY_RETAIN_IN_RECENTS
marca en la
método addFlags()
de la
intent que inicie la actividad.
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; }
Para lograr el mismo efecto, configura la
Atributo <activity>
android:autoRemoveFromRecents
a false
. El valor predeterminado es true
para las actividades del documento y false
para las actividades del documento
las actividades habituales. El uso de este atributo anula la
FLAG_ACTIVITY_RETAIN_IN_RECENTS
.
Cómo habilitar el uso compartido de URLs recientes (solo para Pixel)
En dispositivos Pixel que ejecutan Android 12 o versiones posteriores, los usuarios pueden compartir vínculos al contenido web visto recientemente directamente desde la pantalla Recientes. Después de la visita el contenido de una app, el usuario puede deslizar el dedo hasta la pantalla Recientes y buscar la app dónde vieron el contenido y, luego, presionar el botón de vínculo para copiar o compartir el URL.
Cualquier aplicación puede habilitar la vinculación de Recientes para los usuarios proporcionando una IU web y
anulando
onProvideAssistContent()
:
como se muestra en el siguiente ejemplo:
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")); } }