Pantalla de Recientes

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:

.
La pantalla Recientes que muestra dos carpetas de Google Drive documentos, cada uno representado como una tarea independiente.

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:

.
La pantalla Recientes que muestra Chrome y Gmail que se ejecutan como tareas independientes.

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 configurar FLAG_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 y FLAG_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 y FLAG_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.

.
La pantalla Recientes con un vínculo para compartir contenido web visto recientemente.

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