Talk Android con ella (artículo 177 quinta vuelta en primer lugar: mecanismo de Manipulador de cuatro de Android)

Dime lo que eras Hola, todo el mundo, digamos en una circunvolución es un ejemplo de Android en el mecanismo de Handler, esta vez fuimos a este ejemplo. Chisme Hugh mencionó, palabras a su vez reformada. Hablemos de Android ahora!

Dime quién, se analizó el código fuente de la clase Handler en un giro, el análisis de clase Looper en este capítulo volver al código fuente. Se implementa en el frameworks/base/core/java/android/os/Looper.javaarchivo.

Echemos un vistazo a sus variables miembro, hay principalmente dos: uno se utiliza para almacenar una cola de mensajes, que se utiliza además para almacenar un hilo actual, se inicializan en el constructor, el código fuente detallado es como sigue:

 private Looper(boolean quitAllowed) {
     mQueue = new MessageQueue(quitAllowed);  //消息队列在这里创建
     mThread = Thread.currentThread();
 }

A continuación nos fijamos en el foco de los métodos usados comúnmente, primero preparemétodo, se utiliza principalmente para hacer Looper inicialización, el contenido principal es construir un hilo inferior y los objetos y asociado, cuyo código fuente es el siguiente:

 public static void prepare() {
     prepare(true);
 }
 private static void prepare(boolean quitAllowed) {
     if (sThreadLocal.get() != null) {
         throw new RuntimeException("Only one Looper may be created per thread");
     }
     sThreadLocal.set(new Looper(quitAllowed));
 }

Luego analizamos myLooper método, que es para volver objeto principal Looper para el subproceso actual

 public static @Nullable Looper myLooper() {
     return sThreadLocal.get();
 }

El núcleo de las apariciones método, es el método de bucle. Su función principal es ejecutar el ciclo de noticias, se encuentra esencialmente recorrer la cola, lo que sigue es el código fuente después de leer el código fuente, que ignore las muchas operaciones no esenciales:

 public static void loop() {
     final Looper me = myLooper();          //获取当前线程中的Looper
     final MessageQueue queue = me.mQueue;  //获取Looper中的消息队列
     for (;;) {                             //启动消息循环
         Message msg = queue.next();        //遍历消息队列中的每条消息
         msg.target.dispatchMessage(msg);   //通过dispatchMessage方法回调Handler中的handleMessage方法处理消息
     }
 }

Finalmente, el método es dejar de fumar, que se utiliza para salir del bucle de corriente Looper mensaje corriendo, su código fuente es el siguiente:

 public void quit() {
     mQueue.quit(false);
 }

Dime, el mecanismo de Android Handler en caso de que se describe aquí, y hay algunos ejemplos para, oye Vamos siguiente descomposición!

Publicados 528 artículos originales · ganado elogios 131 · vistas 620 000 +

Supongo que te gusta

Origin blog.csdn.net/talk_8/article/details/105182955
Recomendado
Clasificación