Android Handler Preguntas frecuentes

      Android Handler como el tipo más comúnmente usado, responsable de la comunicación entre hilos.

      clase asociada tiene Looper, MessageQueue, mensaje, esto se debe principalmente al registro sobre Handler conducen a pérdidas de memoria, así como algunos problemas comunes.

A. Handler conducen a pérdidas de memoria

       fenómeno de pérdida de memoria es objeto ya no se requiere no se pueden recuperar GC; por ejemplo, una actividad tiene dejar de fumar, pero no puede ser recuperado GC, en los casos graves puede conducir a OOM.

       La razón de Manejador de plomo a pérdidas de memoria, si dentro del objeto Actividad Handler creado por una nueva clase de forma anónima no estático, entonces el objeto Handler sostener implícitamente una referencia (las clases internas Java Central africanos estática a clases de retención fuera de Actividad referencias); a continuación, si la destrucción Actividad Handler y no ha estado en el proceso de noticias, conducirá objeto Handler contiene una referencia a la actividad, dando como resultado actividad puede no liberar pérdidas de memoria.

       Un amigo dijo en la actividad en la hora de dejar de llamarlo removeCallbacksAndMessages Handler para eliminar el mensaje, este enfoque puede reducir efectivamente los objetos continúan Handler handlerMessage sobrecarga causada después de la actividad dejar de fumar, pero no resolvió el problema de pérdida de memoria mencionado anteriormente; la razón es que manejador envía objetos de los mensajes a la diana objeto MessageQueue, mesaage sostendrá objeto Handler envía la referencia de mensaje, una referencia al objeto si existe meassage Handler, entonces el objeto Handler no puede ser reciclado, Actividad resultante no puede ser reciclado y pérdidas de memoria.

La solución es

       1. Handler se define como estática, porque las clases internas estáticas no tienen una referencia a la clase externa

        2 se define como la clase interna estática, para el funcionamiento de las variables miembro de clase externos Handler Actividad, que pasa a través Handler Actividad constructor objeto implementado, a continuación, envuelto con objetos entrantes referencias débiles de la actividad, para asegurar que cada actividad en el GC los objetos pueden ser reciclados.

        La actividad se puede asegurar que el problema no existe cuando se utiliza una pérdida de memoria Handler por el encima de dos pasos. La realización descrita anteriormente es el principio, el paquete se simplificará mediante el uso de uso real, para definir cada tiempo para evitar una estática Handler.

 

Dos cuestiones relacionadas. Looper bucle infinito

       Looper es un bucle inalámbrico, a continuación, el hilo principal Looper dará lugar a que el hilo principal bloqueado, causando ANR?

       Este es un nivel relativamente alto de preguntas de la entrevista, la respuesta es claramente no, pero le gustaría resolver lo que necesita respuesta.

       Agilizar la respuesta es: el hilo principal Andrews por Looper bucle infinito para asegurar que el hilo principal no se cerrará acaba de empezar, de lo contrario el proceso saldrá del hilo principal se retiró, y cuando tenemos problemas operativos ANR se debe a que en la actividad, servicio, BroadcastReceiver en devoluciones de llamada no debe ser la operación que consume tiempo, ejecute el código que lleva una ventaja de tiempo de espera a la ANR.

        El principio es el sistema en el que habrá un proceso del sistema de servidor; proceso de APP en la capa de aplicación se está ejecutando, hilo principal del sistema del servidor del proceso de Actividad onCreate, onResume, onPause y otros sistemas se pasan al proceso de devolución de llamada de comunicación APP Binder, y finalmente el mensaje transmite al hilo principal ejecuta la devolución de llamada correspondiente, ANR problema no existe en este proceso, y después de la ANR Si recibe un mensaje de proceso de devolución de llamada APP, tales como la realización de una operación que consume tiempo más allá de un cierto tiempo en el onCreate.

 

 

Publicado 11 artículos originales · ganado elogios 2 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/zhengyin_tmac/article/details/105056653
Recomendado
Clasificación