Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo garantiza ThreadLocal que un hilo tenga solo un Looper?

¿Cómo garantiza ThreadLocal que un hilo tenga solo un Looper?

Todos sabemos que se creará un Looper cuando se llame a Looper.prepare, entonces, ¿cómo garantizar que un hilo tenga solo un Looper?

Primero, debes saber que hay una variable sThreadLocal en Looper, que se utiliza para almacenar información de contexto

y es una variable estática final calificada, por lo que es única e inmutable.

Después de comprender la función de sThreadLocal, consulte los siguientes preparativos

Primero llame al método sThreadLocal.get()

Y ThreadLocalMap es un HashMap, por lo que necesita obtener un HashMap y determinar si está vacío

Si no hay ningún nodo con la clave sThreadLocal, obtenga valor = null y use este valor como el valor de sThreadLocal, es decir, sThreadLocal, nullgt;; Si el mapa está vacío, cree un HashMap y agréguele

De esta manera, el método get obtendrá Looper o null, si es Looper, arrojará un excepción, si es nulo, llamará al método sThreadLocal set(). Si es un valor nulo, llame a sThreadLocal.set()

Esto en realidad está usando el Looper como valor de sThreadLocal

Regresando al principio, cómo garantizar que un hilo tenga ¿Solo un Looper?

Debido a que sThreadLocal es el contexto del hilo y es único, y hay pares clave-valor en el hilo, un sThreadLocal corresponde a un Looper. Si el Looper se modifica nuevamente, se lanzará. Se produce una excepción porque el Looper ya existe.

Por lo tanto, un hilo tiene un solo Looper.

Si no sabe mucho sobre HashMap, este artículo puede resultarle útil. El principio de HashMap

.