Cosas sutiles sobre las corrutinas de Android: una introducción Una introducción, cosas que debe saber antes de usar corrutinas | por welsen ho | marzo de 2022
Esa es una de las cosas que me vino a la mente cuando abrí mi correo electrónico el lunes por la mañana, somos un grupo de desarrolladores, desarrolladores que han estado llamando para satisfacer las necesidades de los pollos.
En el curso del desarrollo, no se pueden evitar algunos requisitos, como: conectar la API para enviar la solicitud, acceder a los datos locales del dispositivo o incluso algunos requisitos de Decode Bitmap (no sé, Decode Bitmap es tres pequeños, de todos modos, lo encontré)
Entonces, ¿por qué necesito hacer estas solicitudes en particular? Porque todos tienen un problema común, es decir, no pueden ejecutarse directamente en el subproceso principal. No te preocupes, también te explicaré qué es el hilo principal.
Pero puede imaginar una situación, cuando está hablando por teléfono con otras personas, si hay una interrupción en este momento y usted contesta, la llamada original se suspenderá, pero si la suspende por mucho tiempo, la otra parte también puede ser infeliz contigo, cuelga el teléfono.
Bueno, ahora por favor recuerda lo que acabo de decir, y lo usaremos más adelante. Ahora hablemos de lo que es Main Thread.
En los términos más simples, puede haber muchos subprocesos en cada aplicación, y cada subproceso es una lista de comandos, del tipo de una línea, con muchos comandos (el código que escribió), que le dice a su aplicación lo que debe hacer ahora. El subproceso principal es el más grande entre todos los subprocesos. La pantalla que realmente muestra al usuario depende completamente al 100% de este subproceso principal. Debido a que el subproceso principal controla el dibujo de la pantalla, algunas personas también lo llaman subproceso de interfaz de usuario: Solía usar este tipo de charla seca en las entrevistas, creo que debe quedar claro XD
No hablaré de Main Thread en detalle aquí, solo hablé de ello en general. Sin embargo, Main Thread definitivamente no es tan superficial como dije, pero debido a que el tema es Coroutine después de todo, tengo que presentar Main Thread.
La definición oficial de Thread:https://developer.android.com/reference/java/lang/Thread#:~:text=A%20thread%20is%20a%20thread,to%20threads%20with%20lower%20priority.
En primer lugar, debe saber que este es el elemento vital de su aplicación. Si se mete con esta línea, recibirá montones de quejas de los usuarios, y usted, PM y yo esperamos que esto no suceda.
Como sabe que el subproceso principal se usa para controlar la visualización de la pantalla, hoy necesita la API de llamada y el servidor para solicitar que los datos se actualicen en la pantalla. Esto definitivamente causará alguna diferencia de tiempo, ¿verdad? Suponiendo que el tiempo desde el envío de la solicitud hasta la respuesta es de aproximadamente 5 segundos, porque el subproceso principal es el subproceso más grande, entonces este asunto también aparecerá en la lista de comandos del subproceso principal. Cuando se envía la solicitud, se inicia la acción, el subproceso principal El subproceso realmente esperará a que se complete esta cosa (Solicitud para obtener respuesta). Esperar el subproceso principal significa que toda la interfaz de usuario en su pantalla aún está en su lugar. A nuestros ojos, es la pantalla congelada.
Este tipo de congelación definitivamente no es lo que el usuario esperaba. La imagen que esperaba debería ser un círculo de carga que se ejecuta en la pantalla y espera que los datos regresen a la actualización, pero como acabo de decir, siempre que el subproceso principal esté bloqueado, significa que la pantalla está atascada. , ¿cómo solucionamos este problema?
No solo dije que una aplicación puede tener muchos subprocesos. De hecho, el subproceso principal tiene un hermano llamado subproceso de fondo. Este subproceso se puede usar principalmente para tratar problemas no relacionados con la pantalla. Puede ayudar a tratar los problemas de la API de llamadas. Puede concentrarse en el trabajo de la pantalla.
Entonces, ¿cómo hacemos para hacer esto?
Respuesta: rutina
Coroutine nos permite decidir fácilmente qué código se ejecutará en el subproceso principal y cuál se ejecutará en otros subprocesos. Y además, está integrado en Kotlin, por lo que la curva de aprendizaje no es demasiado difícil, al menos no el tipo de curva de aprendizaje con un ángulo de 90 grados.
Complemento: si el sistema Android detecta el subproceso principal y lo bloquea durante demasiado tiempo, la aplicación parpadeará y le indicará que la aplicación no responde. Es decir, la pregunta ANR Esta es la pregunta «¿Por qué sucede ANR» que a muchos entrevistadores les encanta hacer.
Solo te pedí que recordaras el ejemplo de la llamada telefónica, que es una situación que puedes intentar imaginar.
Al final del primer acto, este es un comentario de apertura para Coroutine. En el próximo artículo, hablaremos sobre la versión de uso real y el ejemplo de Coroutine.