Red de conocimiento del abogados - Ley de patentes - Análisis completo de la actividad de Android, algunos puntos de conocimiento son fáciles de olvidar

Análisis completo de la actividad de Android, algunos puntos de conocimiento son fáciles de olvidar

La actividad, como uno de los cuatro componentes principales de Android, es el componente más importante y más utilizado. Implica muchos puntos de conocimiento. Algunos puntos de conocimiento rara vez se utilizan en el desarrollo diario, pero son necesarios en algunos. Escenarios: preste especial atención al hecho de que este artículo ha recopilado en detalle los puntos de conocimiento involucrados en la Actividad para referencia de desarrollo.

Se pueden hacer muchas preguntas sobre la Actividad, como por ejemplo:

¿Cuál es el ciclo de vida de la Actividad?

¿Cómo comunicarse entre Actividades?

¿Ciclo de vida de la actividad en diversas circunstancias?

¿Cuál es el ciclo de vida de la Actividad al cambiar entre pantallas horizontales y verticales?

¿Cuál es el ciclo de vida de la actividad cuando el primer plano cambia al fondo y luego vuelve al primer plano?

¿Cuál es el ciclo de vida de la Actividad al presionar la tecla Inicio cuando aparece el Diálogo?

¿Cuál es el ciclo de vida al saltar entre dos actividades?

¿Cuál es el ciclo de vida de la Actividad cuando se baja la barra de estado?

¿Comparación de ciclos de vida entre Actividad y Fragmento?

¿Cuáles son las diferencias entre los cuatro modos de actividad de lanzamiento?

¿Guardado y restauración del estado de actividad?

¿Cuáles son los métodos de implementación de la animación de transición de actividad?

¿Cómo obtener el ancho y alto del control durante el ciclo de vida de la Actividad?

¿Cuándo se ejecuta onNewIntent?

¿Cómo salir de múltiples actividades de forma continua?

Cómo configurar Acitivty al estilo Dialog, android:theme="@android:style/Theme.Dialog"

En cuanto al ciclo de vida del cambio de pantalla horizontal y vertical, corresponde a diferentes teléfonos móviles. Debido a la personalización del fabricante, habrá diferentes efectos. Por ejemplo, si se configura configChanges="orientation", algunos teléfonos móviles ejecutarán cada ciclo de vida, pero otros no.

Las conclusiones comunes en Internet son las siguientes:

Pero la prueba real es la siguiente:

Se puede ver que el ciclo de vida del corte de pantalla Los teléfonos móviles de diferentes fabricantes serán diferentes.

A partir de API 13 y superiores, cuando el dispositivo cambia la pantalla horizontal o verticalmente, el "tamaño de pantalla" también cambiará. Por lo tanto, para evitar que la página se destruya y se reconstruya debido al cambio de pantalla. debe agregar screenSize y usar la configuración 4, que es android :configChanges="orientation|keyboardHidden|screenSize"

Los cuatro estados de Actividad son los siguientes:

Cuando la actividad. está en estado de pausa o detenido, si la memoria del sistema está agotada, puede destruirse y se reconstruirá cuando regrese a la actividad. El ciclo de vida de retorno normal y retorno después del reciclaje es el siguiente:

Si se devuelve después del reciclaje, el parámetro saveInstanceState de onCreate no está vacío.

¿Qué escenarios activarán la devolución de llamada onNewIntent? Está relacionado con el modo de inicio. Primero, la instancia de Actividad ya existe y solo se puede activar cuando se inicia nuevamente.

Un caso es que el modo de inicio es singleTask o singleInstance. No importa dónde esté la actividad en la pila, se activará la devolución de llamada onNewIntent y se eliminarán otras actividades anteriores. El otro caso es que el modo de inicio es singleTop o se inicia con. FLAG_ACTIVITY_SINGLE_TOP y la actividad. Si la instancia está en la parte superior de la pila, se activará onNewIntent. Si no está en la parte superior de la pila, se volverá a crear y no se activará.

En el desarrollo empresarial real, a menudo es necesario salir de varias instancias de actividad en sucesión. A continuación se muestran varios métodos comunes:

● Enviar transmisiones específicas

1. Registre esta transmisión específica en la actividad que necesita manejar salidas continuas

2. La actividad que inició la salida envía esta transmisión específica

3. La actividad que recibe las llamadas de transmisión; terminar la página.

● Salida recursiva

1. Utilice startActivityForResult para iniciar una nueva actividad

2. Cuando finalice la página anterior, se activa la devolución de llamada onActvityResult; luego, según requestCode y resultCode Procese si finalizar para lograr el efecto de salida recursiva.

● FLAG_ACTIVITY_CLEAR_TOP

Inicie una nueva actividad a través de intent.setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP). Si ya existe esta instancia en la pila, todas las actividades por encima de esta actividad se cerrarán. efecto del modo de inicio singleTop.

● Pila de actividades personalizadas

1. Personalice la lista de actividades Si se agrega una actividad recién abierta a la pila, si se cierra, la pila se eliminará

2. Requerido Al salir de múltiples actividades, el bucle elimina la instancia de actividad de la pila y llama a finalizar.

La pila de tareas se menciona a menudo cuando se habla del modo de inicio de la actividad. Entonces, ¿qué es la pila de tareas?

Una tarea es una colección de actividades. Utiliza una pila para administrar las actividades que contiene. Esta pila también se llama pila secundaria. El orden de las actividades en la pila se basa en el orden. fueron abiertos en secuencia. La pila de retorno es una estructura de datos típica de último en entrar, primero en salir (último en entrar, primero en salir). La siguiente figura nos muestra claramente los cambios de estado de múltiples actividades en la pila de retorno a través de la línea de tiempo:

taskAffinity La correlación de tareas se puede utilizar para especificar a qué tarea está más dispuesta a adjuntarse una actividad, de forma predeterminada. Todas las actividades en la misma aplicación tienen la misma afinidad y el nombre es el nombre del paquete de la aplicación. Por supuesto, podemos especificar el atributo taskAffinity por separado para cada Actividad (no es lo mismo que el nombre del paquete). El atributo taskAffinity se utiliza principalmente junto con el modo de inicio singleTask y el atributo enableTaskReparenting, y no tiene significado en otros casos.

taskAffinity tiene los siguientes dos escenarios de aplicación:

Se divide en inicio explícito e inicio implícito.

(1) Mostrar inicio

Especifique directamente el nombre de la clase de actividad que se ajustará.

(2) Inicio implícito

La intención puede coincidir con la información de filtro establecida en el IntentFilter del componente de destino. Si no coincide, la actividad de destino no se iniciará. La información de filtrado de IntentFilter incluye acción, categoría y datos.

Los aspectos a tener en cuenta sobre IntentFilter son los siguientes:

● Puede haber múltiples filtros de intención en una actividad

● Puede haber múltiples filtros de intención en una actividad al mismo tiempo acción, categoría, datos

● Siempre que una intención pueda coincidir con cualquier conjunto de filtros de intención, se puede iniciar la actividad correspondiente

● La siguiente oración debe agregarse a la Actividad recién creada, lo que significa que puede recibir llamadas implícitas

Siempre que coincide con una acción, puede saltar. Tenga en cuenta que las acciones deben ser sensibles al tamaño.

Reglas: si hay categorías en la intención, todas pueden coincidir con las categorías en el filtro de intención. El número de categorías en la intención puede ser menor que el del filtro de intención. Además, establecer la categoría por sí sola no puede coincidir con la actividad, porque el atributo de categoría es información adicional para ejecutar la Acción.

Si la intención no agrega una categoría, coincidirá con la predeterminada, que es "android:intent.category.DEFAULT"

En el ejemplo anterior, si intent.setAction ("action_name") se elimina, arrojará una excepción:

Reglas: similar a la acción, pero los datos tienen una estructura compleja siempre que coincidan con un dato y sean consistentes con todos los atributos de los datos. , la actividad se puede coincidir. Siempre que un atributo no coincida, la actividad no se podrá encontrar.

La estructura de los datos:

Los datos se componen principalmente de URI y mimeType.

La URI se puede configurar con mucha información y su estructura es la siguiente:

Similar a la URL, por ejemplo:

mineType: hace referencia al recurso. tipos que incluyen texto, imágenes, audio y video, etc., etc., por ejemplo: texto/sin formato, imagen/jpeg, video/*, etc.

Veamos un ejemplo de coincidencia de datos:

Solo el esquema de coincidencia

Solo el esquema de coincidencia también puede coincidir con la actividad.

Esquema de coincidencia, host, puerto

Cambie los datos anteriores para

Coincidir con mineType

Si existe mineType, no puede simplemente establecer es setData o setMineType, porque setData establecerá mineType en nulo y setMineType establecerá datos en nulo, lo que hará que la actividad nunca coincida, por lo que se debe usar setDataAndType.

Utilice el valor predeterminado del esquema content\file

Tenga en cuenta que este método debe ejecutarse inmediatamente después de que se llame al método startAtivity o al método de finalización. No se puede retrasar, pero sí. ejecutarse en un subproceso secundario.

Hay cuatro animaciones en windowAnimationStyle:

actividadOpenEnterAnimation // Abre una nueva Actividad e ingresa la animación mostrada por la nueva Actividad

actividadOpenExitAnimation // Abre una nueva Actividad y destruye la animación mostrada por la Actividad anterior

actividadCloseEnterAnimation //Cierra la Actividad actual e ingresa la animación mostrada por la Actividad anterior

actividadCloseExitAnimation //La animación que se muestra al cerrar la Actividad anterior Actividad

El método de overridePendingTransition es relativamente contundente y antiguo, y no es adecuado para el estilo MD. Google proporciona una nueva animación de transición ActivityOptions y un paquete de compatibilidad ActivityOptionsCompat.

Sabemos que el ancho y el alto del control se obtienen directamente en onCreate y onResume como 0. ¿Hay alguna forma de obtener el ancho y el alto reales del control? Siempre que haya tres formas de obtenerlo: onWindowFocusChanged, view.post y ViewTreeObserver.

Cuando el usuario hace clic en el icono del escritorio para iniciar la APLICACIÓN, el proceso detrás de ella es el siguiente:

El escritorio móvil que vemos es la interfaz del programa Iniciar. el ícono de la aplicación activará un evento de clic y llamará a startActivity (intención), y luego se comunicará con ActivityManagerService (AMS) a través del mecanismo Binder IPC. AMS realiza una serie de operaciones y finalmente inicia la aplicación actual. El proceso aproximado es el siguiente:

Recopile objetos de intención de salto a través de resolveIntent() de PackageManager La información de señalización y luego use el método GrantUriPermissionLocked() para verificar si el usuario tiene permisos suficientes para llamar a la Actividad señalada por el objeto de intención. Si tiene permiso, inicie la actividad de destino en una nueva tarea. Si descubre que no hay ningún proceso, cree el proceso primero.

Si el proceso no existe, AMS llamará a startProcessLocked para crear un nuevo proceso. En este método, el proceso cigoto será notificado a través de la comunicación de socket para incubar el nuevo proceso y devolver el pid. se inicializará ActivityThread y llamará a Looper.prepareLoop() y Looper.loop() en secuencia para iniciar el bucle de mensajes.

Después de crear el proceso, el siguiente paso es vincular la Aplicación y el proceso llamará al método bindApplication del objeto ActivityThread creado en la sección anterior para completar el trabajo de vinculación. mensaje BIND_APPLICATION, y finalmente se llamará al método handleBindApplication para procesar el mensaje, y se llamará al método makeApplication para procesar el mensaje, y las clases de APP se cargarán en la memoria.

A través de los pasos anteriores, el sistema ya tiene el proceso de la Aplicación. El inicio posterior es iniciar la Actividad desde otros procesos existentes, es decir, llamar a realStartAcitvityLocked. Este método llamará al objeto de hilo principal de la Aplicación. ActivityThread.scheduleLaunchActivity método, en el método enviará LAUNCH_ACTIVITY a la cola de mensajes y finalmente procesará el mensaje a través de handleLaunchActivity para completar el inicio de Acitivty.

Actividad

¿Cuántas de las 36 dificultades principales de Actividad conoces? "Colección sugerida"

[Traducción] Análisis del proceso de inicio de aplicaciones de Android