Skip to content

Most visited

Recently visited

navigation

Pantalla de información general

La pantalla de información general (que también se denomina pantalla Recientes, lista de tareas recientes o aplicaciones recientes) es una interfaz de usuario (IU) de nivel de sistema que enumera las actividades y las tareas usadas recientemente. El usuario puede navegar por la lista y seleccionar una tarea para reanudar, o bien, puede deslizar una tarea para quitarla de la lista. Con la versión 5.0 de Android (nivel de API 21), varias instancias de la misma actividad, con diferentes documentos, pueden aparecer como tareas en la pantalla de información general. Por ejemplo, Google Drive puede tener una tarea para cada uno de varios documentos de Google. Cada documento aparece como una tarea en la pantalla de información general.

Figura 1: Pantalla de información general en la que se muestran tres documentos de Google Drive , cada uno de ellos representado como una tarea independiente.

Normalmente, debes permitir que el sistema defina cómo se representan sus tareas y actividades en la pantalla de información general, y no es necesario que modifiques este comportamiento. Sin embargo, tu aplicación puede determinar cómo y cuándo aparecen las actividades en la pantalla de información general. La clase ActivityManager.AppTask te permite administrar tareas, y los indicadores de actividad de la clase Intent te permiten especificar cuándo se agrega o se quita una actividad de la pantalla de información general. Además, los atributos <activity> te permiten configurar el comportamiento en el manifiesto.

Agregar tareas a la pantalla de información general

El uso de los indicadores de la clase Intent para agregar una tarea permite un mayor control sobre el momento y la forma en que se abre o se vuelve a abrir un documento en la pantalla de información general. Cuando utilizas los atributos <activity>, puedes optar por abrir siempre el documento en una tarea nueva o reutilizar una tarea existente para el documento.

Uso del indicador de intent para agregar una tarea

Cuando creas un documento nuevo para tu actividad, llamas al método startActivity() de la clase ActivityManager.AppTask, y le pasas la intent que lanza la actividad. Para insertar una interrupción lógica de modo que el sistema trate a tu actividad como una tarea nueva en la pantalla de información general, pasa el indicador FLAG_ACTIVITY_NEW_DOCUMENT en el método addFlags() de la Intent que lanza la actividad.

Nota: El indicador FLAG_ACTIVITY_NEW_DOCUMENT reemplaza el indicador FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET, que es obsoleto a partir de Android 5.0 (nivel de API 21).

Si configuras el indicador FLAG_ACTIVITY_MULTIPLE_TASK cuando creas el documento nuevo, el sistema siempre crea una tarea nueva con la actividad de destino como raíz. Esta configuración permite abrir el mismo documento en más de una tarea. El código siguiente demuestra cómo la actividad principal hace esto:

DocumentCentricActivity.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 = mCheckbox.isChecked();
      final Intent newDocumentIntent = new Intent(this, NewDocumentActivity.class);
      newDocumentIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
      newDocumentIntent.putExtra(KEY_EXTRA_NEW_DOCUMENT_COUNTER, incrementAndGet());
      return newDocumentIntent;
  }

  private static int incrementAndGet() {
      Log.d(TAG, "incrementAndGet(): " + mDocumentCounter);
      return mDocumentCounter++;
  }
}

Nota: Las actividades lanzadas con el indicador FLAG_ACTIVITY_NEW_DOCUMENT deben tener configurado el valor del atributo android:launchMode="standard" (el predeterminado) en el manifiesto.

Cuando la actividad principal lanza una actividad nueva, el sistema busca entre las tareas existentes una tarea cuya intent coincida con el nombre del componente de intent y los datos de la intent de la actividad. Si no se encuentra la tarea, o la intent contenía el indicador FLAG_ACTIVITY_MULTIPLE_TASK, se creará una tarea nueva con la actividad como raíz. Si el sistema encuentra una tarea, la pone en primer plano y pasa la intent nueva a onNewIntent(). La actividad nueva recibe la intent y crea un documento nuevo en la pantalla de información general, como en el siguiente ejemplo:

NewDocumentActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_new_document);
    mDocumentCount = getIntent()
            .getIntExtra(DocumentCentricActivity.KEY_EXTRA_NEW_DOCUMENT_COUNTER, 0);
    mDocumentCounterTextView = (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);
}

Uso del atributo de actividad para agregar una tarea

Una actividad también puede especificar en su manifiesto que siempre se lanza en una tarea nueva con el atributo <activity>, 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 configurar el indicador FLAG_ACTIVITY_NEW_DOCUMENT sin configurar el indicador FLAG_ACTIVITY_MULTIPLE_TASK, como se describe anteriormente en la sección Uso del indicador de intent para agregar una tarea.
always
La actividad crea una tarea nueva para el documento, incluso si el documento ya está abierto. Utilizar este valor es lo mismo que establecer los indicadores FLAG_ACTIVITY_NEW_DOCUMENT y FLAG_ACTIVITY_MULTIPLE_TASK.
none”
La actividad no crea una tarea nueva para el documento. La pantalla de información general trata la actividad como lo haría de forma predeterminada: muestra una sola tarea para la aplicación, la que se reanuda desde la última actividad que el usuario invocó.
never
La actividad no crea una tarea nueva para el documento. La configuración de este valor reemplaza el comportamiento de los indicadores FLAG_ACTIVITY_NEW_DOCUMENT y FLAG_ACTIVITY_MULTIPLE_TASK, si alguno de estos está establecido en la intent, y la pantalla de información general muestra una sola tarea para la aplicación, la que se reanuda desde la última actividad que el usuario invocó.

Nota: En el caso de los valores que no sean none ni never, la actividad debe definirse con launchMode="standard". Si no se especifica este atributo, se usará documentLaunchMode="none".

Eliminación de tareas

De forma predeterminada, la tarea de un documento se quita automáticamente de la pantalla de información general cuando su actividad finaliza. Puedes reemplazar este comportamiento con la clase ActivityManager.AppTask, con un indicador Intent o con un atributo <activity>.

Siempre puedes excluir completamente una tarea de la pantalla de información general fijando el atributo <activity> android:excludeFromRecents en true.

Puedes establecer la cantidad máxima de tareas que tu app puede incluir en la pantalla de información general fijando el atributo <activity> android:maxRecents en un valor entero. El valor predeterminado es 16. Cuando se alcanza la cantidad máxima de tareas, la tarea menos usada recientemente se quita de la pantalla de información general. El valor máximo android:maxRecents es 50 (25 en dispositivos con poca memoria); los valores inferiores a 1 no son válidos.

Uso de la clase AppTask para quitar tareas

En la actividad que crea una tarea nueva en la pantalla de información general, puedes especificar cuándo quitar la tarea y finalizar todas las actividades relacionadas con dicha tarea llamando al método finishAndRemoveTask().

NewDocumentActivity.java

public void onRemoveFromRecents(View view) {
    // The document is no longer needed; remove its task.
    finishAndRemoveTask();
}

Nota: El uso del método finishAndRemoveTask() reemplaza el uso de la etiqueta FLAG_ACTIVITY_RETAIN_IN_RECENTS, lo que se explica a continuación.

Retención de tareas finalizadas

Si deseas retener una tarea en la pantalla de información general, aunque su actividad haya finalizado, pasa la etiqueta FLAG_ACTIVITY_RETAIN_IN_RECENTS en el método addFlags() de la intent que lanza la actividad.

DocumentCentricActivity.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, incrementAndGet());
    return newDocumentIntent;
}

Para lograr el mismo efecto, fija el atributo <activity> android:autoRemoveFromRecents en false. El valor predeterminado es true para actividades de documentos y false para actividades regulares. El uso de este atributo reemplaza la etiqueta FLAG_ACTIVITY_RETAIN_IN_RECENTS, como se explicó anteriormente.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)