Introducción a las actividades

La clase Activity es un componente fundamental de un dispositivo Android y la forma en que se lanzan y reúnen las actividades es fundamental parte del modelo de aplicación de la plataforma. A diferencia de los paradigmas de programación qué apps se inician con un método main(), la biblioteca el sistema inicia el código en una instancia Activity invocar métodos de devolución de llamada específicos que correspondan a etapas específicas de su ciclo de vida.

En este documento, se introduce el concepto de actividades y se proporciona información una guía sobre cómo trabajar con ellos. Si quieres obtener más información sobre las prácticas recomendadas para diseñar la arquitectura de tu app, consulta lo siguiente: consulta Guía de arquitectura de apps.

El concepto de actividades

La experiencia en la aplicación para dispositivos móviles se diferencia de la versión para computadoras de escritorio en el sentido de que la interacción de un usuario con la aplicación no siempre comienza en el mismo lugar. En este caso, no hay un lugar específico desde donde el usuario comienza su actividad. Por ejemplo, si abres una app de correo electrónico desde tu pantalla principal, es posible que veas un una lista de correos electrónicos. Por el contrario, si usas una app de redes sociales que inicia tu aplicación de correo electrónico, puedes ir directamente a la pantalla de la aplicación de correo electrónico para redactar un correo electrónico.

La clase Activity está diseñada para facilitar este paradigma. Cuando una app invoca a otra, la app que realiza la llamada invoca a una actividad en la otra app, en lugar de la app como un todo atómico. De esta manera, la actividad sirve como el punto de entrada para la interacción de una aplicación con el usuario. Implementas un como una subclase de la clase Activity.

Una actividad proporciona la ventana en la que se dibuja la app su IU. Por lo general, esta ventana ocupa toda la pantalla, pero puede ser más pequeña que la pantalla y flotar sobre otras ventanas. Por lo general, una actividad implementa una pantalla en una app. Por ejemplo, una de las actividades de una aplicación puede implementarás una pantalla Preferences, mientras que otra actividad implementa una pantalla con la opción Seleccionar foto.

La mayoría de las apps contienen varias pantallas, lo que significa que incluyen varias de datos. Por lo general, una actividad en una app se especifica como la principal actividad, que es la primera pantalla que aparece cuando el usuario inicia la aplicación. Cada actividad puede iniciar otra actividad para hacer lo siguiente: realizar diferentes acciones. Por ejemplo, la actividad principal en un mensaje de correo la aplicación puede mostrar la pantalla que muestra una bandeja de entrada de correo electrónico. A partir de ahí, la principal la actividad podría iniciar otras actividades que proporcionen pantallas para tareas como escribir y abrir mensajes individuales.

Si bien las actividades trabajan juntas para formar una experiencia de usuario cohesiva en un aplicación, cada actividad está ligada únicamente a las demás. existen por lo general, son mínimas dependencias entre las actividades de una app. De hecho, las actividades a menudo inician actividades que pertenecen a otras aplicaciones. Por ejemplo: una app de navegador podría iniciar la actividad de Compartir de una app de redes sociales.

Para usar actividades en tu app, debes registrar información sobre ellas en el manifiesto de la app, y debes administrar los ciclos de vida de las actividades de forma adecuada. En el resto de este documento, se presentan estos temas.

Cómo configurar el manifiesto

Para que tu aplicación pueda usar actividades, debes declararlas. y algunos de sus atributos en el manifiesto.

Cómo declarar actividades

Para declarar tu actividad, abre el archivo de manifiesto y agrega un <actividad> como elemento secundario del <aplicación> . Por ejemplo:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

El único atributo obligatorio para este elemento es android:name. que especifica el nombre de clase de la actividad. También puedes agregar atributos que definen características de la actividad, como una etiqueta, un ícono o un tema de IU. Para obtener más información sobre estos y otros atributos, consulta la <actividad> documentación de referencia del elemento.

Nota: Después de publicar la app, ocurrirá lo siguiente: no deberías cambiar la actividad y nombres de usuario. Si lo haces, se pueden romper algunas funcionalidades, como los accesos directos a las apps. Para obtener más información sobre los cambios que debes evitar luego de la publicación, consulta Elementos que no pueden cambiar.

Cómo declarar filtros de intents

Filtros de intents son una función muy poderosa de la plataforma de Android. Ellas proporcionan la capacidad de iniciar una actividad no solo en función de un explícita, pero también implícita. Por ejemplo: una solicitud explícita podría indicar al sistema que debe iniciar la actividad Enviar correo electrónico en la app de Gmail”. Por el contrario, una solicitud implícita le indica a la “Iniciar una pantalla de envío de correo electrónico que pueda realizar el trabajo". Cuando la IU del sistema le pregunta al usuario qué app debe usar para realizar una tarea; ese es un filtro de intents en acción.

Para aprovechar esta función, declara un <filtro de intents> en el <activity>. La definición de este elemento incluye un elemento <action> y De manera opcional, un <categoría> elemento o un <data> . Estos elementos se combinan para especificar el tipo de intent al que puede responder tu actividad. Para ejemplo, el siguiente fragmento de código muestra cómo configurar una actividad que envía datos de texto y recibe solicitudes de otras actividades para hacerlo:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

En este ejemplo, la acción <action> especifica que esta actividad envía datos. Declaración de <category> como DEFAULT habilita la actividad para recibir solicitudes de lanzamiento. La clase <data> especifica el tipo de datos que esta actividad puede enviar. En el siguiente fragmento de código, se muestra cómo llamar al la actividad descrita anteriormente:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

Java

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
Si quieres que tu app sea independiente y no permitir que se activen otras apps sus actividades, no necesitas otros filtros de intents. Actividades que no desea hacer disponibles para otras aplicaciones no deben tener filtros de intents y puedes iniciarlas por tu cuenta con intents explícitos. Para obtener más información sobre cómo tus actividades pueden responder a intents; consulta Intents y filtros de intents.

Cómo declarar permisos

Puedes usar la base de datos Etiqueta <activity> para controlar qué apps pueden iniciar una actividad en particular. Una actividad superior no puede iniciar un secundaria, a menos que ambas tengan los mismos permisos en su . Si declaras un <uses-permission> elemento principal para una actividad superior, cada actividad secundaria debe tener una coincidencia <uses-permission> .

Por ejemplo, si tu app quiere usar una app hipotética llamada SocialApp para compartir una publicación en redes sociales, SocialApp debe definir el permiso que la app que la llame debe tener:

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

Entonces, para poder llamar a SocialApp, tu aplicación debe coincidir con el permiso establecido en Manifiesto de SocialApp:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

Para obtener más información sobre permisos y seguridad en general, consulta Seguridad y permisos.

Cómo administrar el ciclo de vida de la actividad

A lo largo de su vida útil, una actividad pasa por varios estados. Para administrar las transiciones entre estados, debes usar una serie de devoluciones de llamadas. Las siguientes secciones introducir estas devoluciones de llamada.

onCreate()

Debes implementar esta devolución de llamada, que se activa cuando el sistema crea tu actividad. Tu implementación debe inicializar los componentes esenciales de tu actividad: Por ejemplo, tu app debería crear vistas y vincular datos a se enumeran aquí. Lo más importante es que aquí es donde debes llamar setContentView() para definir el diseño de la interfaz de usuario de la actividad.

Cuando onCreate() finaliza, el La siguiente devolución de llamada siempre es onStart().

onStart()

Cuando se cierra onCreate(), la actividad entra al estado Started, y la actividad se vuelve visible para el usuario. Esta devolución de llamada contiene los preparativos finales de la actividad para que pasan a primer plano y se vuelven interactivos.

onResume()

El sistema invoca esta devolución de llamada justo antes de que la actividad comience a interactuar. con el usuario. En este punto, la actividad se encuentra en la parte superior. y captura todas las entradas del usuario. La mayor parte de la funcionalidad principal de una app es implementada en el método onResume().

La devolución de llamada onPause() siempre sigue onResume().

onPause()

El sistema llama a onPause() cuando pierde la actividad. enfoque y entra en el estado Detenida. Este estado se produce, por ejemplo, cuando el usuario presiona el botón Atrás o Recientes. Cuando el sistema llama onPause() para tu actividad, significa técnicamente que tu actividad aún es parcialmente visible, pero la mayoría de las veces es una indicación de que el usuario abandona la actividad, y esta pronto ingresará al Estado Detenida o Reanudada

Una actividad en estado Detenida puede continuar con la actualización de la IU si el usuario espera que la IU se actualice. Entre los ejemplos de una actividad de este tipo, se incluye mostrar una navegación una pantalla de mapa o un reproductor multimedia en reproducción. Incluso si tales actividades pierden el enfoque, el usuario espera que su IU continúe actualizándose.

No deberías usar onPause() para guardar la aplicación o el usuario realizar llamadas de red o ejecutar transacciones de bases de datos. Para obtener información sobre el guardado de datos, consulta Cómo guardar y restablecer el estado de una actividad

Una vez que onPause() termina de ejecutarse, la siguiente devolución de llamada es onStop() o onResume(), dependiendo de sucede una vez que la actividad entra en el estado Detenida.

onStop()

El sistema llama a onStop() cuando el elemento la actividad ya no está visible para el usuario. Esto puede suceder porque la actividad se está destruyendo, una nueva actividad se o una actividad existente está ingresando Reanudado y cubre la actividad detenida. En todos estos casos, la actividad detenida ya no se en absoluto.

La siguiente devolución de llamada que llama el sistema es onRestart(), si el elemento la actividad vuelve a interactuar con el usuario o onDestroy() si esta actividad finaliza por completo.

onRestart()

El sistema invoca esta devolución de llamada cuando se detiene una actividad en el estado Detenida a punto de reiniciarse. onRestart() Restablece el estado de la actividad desde el momento en que esta se detuvo.

A esta devolución de llamada siempre le sigue onStart()

onDestroy()

El sistema invoca esta devolución de llamada antes de que finalice una actividad.

Esta devolución de llamada es la última que recibe la actividad. onDestroy() es que suelen implementarse para garantizar que todos los recursos de una actividad estén se liberan cuando se destruye la actividad, o el proceso que la contiene.

En esta sección, solo se proporciona una introducción a este tema. Para obtener un tratamiento detallado del ciclo de vida de la actividad y sus devoluciones de llamada consulta La actividad Lifecycle.