El conocimiento agregado Android Android parte de los artículos 2020 Handler

 

1. ¿Cuál es Handler?

  Handler se asocia con una rosca correspondiente puede ser enviada y procesada por el objeto MessageQueue Mensaje y Ejecutable. Por lo general, pensamos que es un mecanismo asíncrono.

  a. puede hacer que el correspondiente mensaje Ejecutable y el correspondiente tratamiento en el futuro en algún momento.

  b. Quiero hacer que consume tiempo operación se completa en el África sub-hilo, que permite al operador para actualizar la interfaz de usuario se completa en el hilo principal, y la comunicación entre el hilo hijo y el hilo principal se realiza por Handler.

2.Handler de uso

  Handler proporciona muchos métodos mecanismo asíncrono, pero sólo se publicará y método comúnmente usado de la serie sendMessage, echamos un vistazo al constructor manejador le proporciona:

  • Handler (): El constructor por defecto de este controlador con Looper para el subproceso actual.
  • Handler (Handler.Callback devolución de llamada): El constructor de este controlador para el hilo actual Looper, y aceptar una interfaz de devolución de llamada, donde se puede procesar el mensaje.
  • Handler (Looper Looper): Looper utilizando los suministra en lugar del predeterminado.
  • Handler (Looper Looper, Handler.Callback devolución de llamada): Uso de bucles proporciona en lugar del predeterminado, sino más bien aceptar una interfaz de devolución de llamada para manejar el mensaje.

  A continuación echar un vistazo a varias formas de proporcionar lo Handler:

  • post (r Ejecutable): r cables Ejecutable para añadir la cola de mensajes.
  • postAtTime (r Ejecutable, largas uptimeMillis): r Ejecutable lo añade a la cola de mensajes, y uptimeMillis.
  • postDelayed (r Ejecutable, largas delayMillis): r Ejecutable se añade para hacer la cola de mensajes, y se ejecuta después de que los transcurra tiempo especificado.
  • removeCallbacks (r Ejecutable): Borre todos los mensajes tareas ejecutables que se pueden ejecutar en la cola de mensajes.
  • removeMessages (int qué): Borrar el mensaje objeto de la cola de mensajes en qué campo es "qué" de la tarea mensaje.
  • sendEmptyMessage (int qué): envía un objeto vacío mensaje, el mensaje y lo que el valor conjunto vacío.
  • sendEmptyMessageAtTime (int lo que, a largo uptimeMillis): el envío de un mensaje que contiene sólo los valores a ser entregado en un momento determinado.
  • sendEmptyMessageDelayed (int lo que, a largo delayMillis): el envío de un mensaje que sólo contiene los valores que se entregarán después de un intervalo de tiempo especificado.
  • sendMessage (mensaje MSG): presione el extremo de la cola de mensajes del mensaje, la finalización de todos los mensajes pendientes antes de la hora actual.
  • sendMessageAtTime (msg Mensaje, largas uptimeMillis): Antes de uptimeMillis antes (en milisegundos), poner el mensaje en la cola de mensajes de todos los mensajes pendientes en el tiempo absoluto.
  • sendMessageDelayed (msg Mensaje, largas delayMillis): antes, después todos los mensajes pendientes (la hora actual + delayMillis), un mensaje en la cola de mensajes.

3.Handler mecanismo de implementación interna

  Cuando la entrevista, Handler pidió a principios de probabilidad es aún muy grande, no sólo sólo para la entrevista, y tenemos que mirar a los principios Handler, a continuación, Manejador de usar para nuestros propósitos es muy bueno, por lo menos sabemos que enviamos cómo enviar un mensaje al hilo de interfaz de usuario, cuando surgen problemas, se analizan sólo un poco sabrá dónde se produjo el problema, y luego fijarlo, así, no hay mucho chisme sacó, para introducir la siguiente principios de implementación mecanismo de Handler.
  mecanismo manipulador también puede ser llamado mecanismo de mensajes asíncrono, que se compone principalmente de cuatro partes: Mensaje, Handler, MessageQueue, Looper , en la parte superior de la que tenemos acceso al controlador de mensajes y, el siguiente enfoque de nuestra comprensión de cuatro miembros:

1.Message
  el mensaje es el paso de mensajes entre los hilos, lo que puede llevar una pequeña cantidad de información dentro, para intercambiar datos entre diferentes hilos. El Mensaje de arg1 y arg2 puede llevar a tipo de datos int usando Object obj puede transportar datos.

2.Handler
  Handler nombre del manejador sugiere que está destinado, siempre que se utiliza para enviar mensajes de objetos de los mensajes en el hilo hijo, el hilo de interfaz de usuario de procesar el mensaje asunto del mensaje, el hilo del método sendMessage llamada de enviar un mensaje Mensaje objetos, y los mensajes enviados a través de una serie de suelo después de eliminado finalmente ser transmitida al método de controlador de handleMessage, el objeto mensaje final se procesa en el proceso de mensaje handleMessage.

3.MessageQueue
  el significado MessageQueue es la cola de mensajes, el tiempo que se utiliza para almacenar todos los mensajes enviados a través de Handler. Esta parte del mensaje habría sido almacenado en la cola de mensajes de ellos, a la espera de ser procesados. Cada hilo tendrá unos objetos MessageQueue, recuerde estas palabras. Como puede verse en el hecho de, literalmente, el MessageQueue subyacente estructura de datos es una cola y la cola se almacena sólo objeto Message.

4.Looper
  Looper es MessageQueue ama de llaves cada hilo después de que el método de bucle de llamada Looper (), entrará en un bucle infinito que, y en presencia de un mensaje siempre MesssageQueue, estos mensajes serán eliminados Looper, y pasarlo a la Handler de la handleMessage (método). Cada Looper hilo es sólo un objeto.

  Aprender los cuatro miembros del mecanismo Handler se ha mencionado anteriormente, llegamos a la idea de la razón de nuevo: por primera vez en el hilo de interfaz de usuario se crea una instancia de manejador de un objeto, si se trata de clases internas anónimas y clases personalizadas generadas ejemplo Manipulador de un objeto, tenemos que handleMessage métodos reescritos en los métodos handleMessage que aceptamos la lógica se pueden escribir mensajes de proceso después de hilo UII a través de parámetros MSG, entonces se crea un hilo hijo, las necesidades hilo hijo para actualizar la interfaz de usuario, crear un nuevo objeto de mensaje, y el mensaje datos grabados dentro del mensaje de mensaje de objeto, tal arg1, arg2, obj, etc., y envía el objeto de instancia de mensaje llama al método sendMessge por la instancia Handler anterior del objeto, entonces el mensaje se almacena en MessageQueue la espera de ser procesada, esta MessageQueue ama de llaves cuando Looper está constantemente presente en el MessageQueue mensaje sacado, por el método de devolución de llamada DispatchMessage pasar el mensaje con el método Handler handleMessage, el mensaje antes mencionado, finalmente, será retirado de la MessageQueue Looper pasado a la handleMessage método , Con el tiempo será procesado. Este es el mecanismo de la totalidad de Manejador de flujo de trabajo, ¿cómo? Usted entiende? Considere la tabla siguiente se sabrá mejor el:

Handler diagrama de mecanismos de flujo de trabajo

Desde el punto de vista del código fuente para entender los principios Handler: http://blog.csdn.net/u012827296/article/details/51236614

4.Handler causa una fuga de memoria y soluciones

La razón: no estática clases internas en poder de una clase externa cita anónima, lo que resulta en la actividad externa no pueden ser liberados.

Solución: El controlador interno sostiene referencias débiles exterior y el controlador en lugar de las clases internas estáticas, llame al método de controlador de removeCallback () en la actividad de onDestory () en.

http://blog.csdn.net/javazejian/article/details/50839443

5. ¿Cómo Handler permite la comunicación entre el niño y el hilo de rosca niño?

  la entrevista de hoy, Handler, básicamente, una gran parte del entrevistador va a decir que es suave, pero si se desea resaltar el entrevistador, entonces tenemos que entender del guía muy completa, por lo general Código es una comunicación asíncrona sub-hilo con el hilo principal, por lo que entre el niño y el hilo de rosca niño puede? Por supuesto que sí, pero lo que necesitamos saber lo suficiente sobre Looper, un estudio en profundidad Hanlder se puede ver el controlador de la sección de análisis de código fuente de autor. Así que si necesitamos procesos hijo gestor de la comunicación entre los hilos A y sub-B, y es el hilo hijo A envía un mensaje al hilo B niño, entonces ¿qué debemos hacer?

public class MainActivity extends AppCompatActivity { private Handler threadHandler; [@Override](https://my.oschina.net/u/1162528) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } class ThreadA extends Thread{ [@Override](https://my.oschina.net/u/1162528) public void run() { super.run(); Looper.prepare(); threadHandler = new Handler(){ [@Override](https://my.oschina.net/u/1162528) public void handleMessage(Message msg) { super.handleMessage(msg); //收到来自于ThreadB的消息,注意这里运行在ThreadA线程中 //...... } }; Looper.loop(); } } class ThreadB extends Thread{ [@Override](https://my.oschina.net/u/1162528) public void run() { super.run(); Looper looper = Looper.myLooper(); Message message = new Message(); message.obj = "ThreadB发送消息到ThreadA"; //...... threadHandler.sendMessage(message); } } } 

  Escribí este código es probablemente no es bueno, pero no importa, sólo tenemos que aprender algunas áreas clave, cómo enviar un mensaje a ThreadB ThreadA, primero hay que preparar un looper en ThreadA, que es grande encuesta de noticias mayordomo entonces listo para enviar el mensaje Handler, listo para enviar el mensaje Handler es fácil de entender, y que es para generar un objeto Handler en ThreadA, a continuación, preparar Looper cómo hacerlo? Llamado en ThreadA Looper.prepare (), a continuación, llamar Looper.loop () puede ser, ¿por qué llamarlo? No vemos cómo el código tal que se llama en el hilo principal interfaz de usuario? De hecho, se les llama dentro de la fuente, que no hemos visto, por lo que con el fin de mecanismo Handler muy familiar, necesitamos investigación de estudios de código fuente Handler, por lo que vamos a saber por qué lo que escribir el código aquí para hacer hilo ThreadB envía a rosca ThreadA mensaje a fin de lograr hilo sub-sub-hilo Handler objeto de comunicación asíncrona.

Manipulador de ruedas paquete nativo basado 6.Android

AsyncTask
HandlerThread
IntentService

principio 7.Handler de resolución (desde el ángulo inferior)

Resumirse

preguntas de la entrevista (la forma de detectar su propio aprendizaje)

  • 1. El niño no debe actualizar la interfaz de usuario de hilo de ello? (Escuela y prácticas recluta)
  • Principio 2. Dime acerca de Handler (recluta la escuela y prácticas)
  • 3.Handler conducen a pérdidas de memoria, ¿cómo resolver?
  • 4. Cómo utilizar Handler dejar que el hilo hijo de comunicación y sub-hilo?
  • 5. ¿Me puede dar acerca de los principios de diseño de Handler?
  • ¿Cuál es el principio 6.HandlerThread & & uso de escenarios?
  • Lo que 7.IdleHandler?
  • 8. ¿Se puede crear una correspondencia entre el hilo de múltiples Handler, Handler y Looper?
  • 9. ¿Por qué el sistema Android no se recomienda visitar la interfaz de usuario hilo hijo?
  • 10.Looper Por qué no da lugar a un bucle infinito aplicaciones atrapados?
  • 11. Uso mensaje postDealy controlador de cola algún cambio?
  • 12. ¿Puede un hilo hijo Handler fuera de él en directo de nuevo?
  • ¿Cuáles son la diferencia entre la forma en 13.Message y objetos creados?
  • 14.ANR y Handler existen estos vínculos?
  • Looper Looper hilo principal y el niño hilo 15. ¿Cuál es la diferencia?
  • 16. ¿Por qué no puede hablar de comunicación Handler Cruz-proceso?
  • retardo del mensaje 17.Handler es cómo lograr?
  • 18. ¿Cuál es la barrera mensaje?
  • 19. Supongamos que el nuevo hilo principal y Handler A Handler B y C Handler, hay sub-hilo, un mensaje enviado por el hilo hijo Handler C, y luego Handler A Handler B puede recibirlo? ¿Por qué?

Nota: El final del artículo, el autor mismo se enfrentan a las preguntas de la síntesis, o quiere encontrar la respuesta de cambio, iniciar autor GitHub proyecto AndroidFaceInterview

Actualizado: 01/15/2020

Recomendado: empresa de diseño LOGO

Supongo que te gusta

Origin www.cnblogs.com/1994jinnan/p/12644204.html
Recomendado
Clasificación