Handler creado en el hilo principal actúa como si estuviera en otro hilo
Como dice google:
A Handler le permite enviar y procesar mensajes y objetos ejecutables asociados con MessageQueue de un hilo. Cada instancia de Handler está asociada con un solo hilo y la cola de mensajes de ese hilo. Cuando crea un nuevo controlador, está vinculado a la cola de hilos / mensajes del hilo que lo está creando; a partir de ese momento, entregará mensajes y ejecutables a esa cola de mensajes y los ejecutará a medida que salgan del mensaje. cola
Y espero que cuando cree un controlador en el subproceso principal (subproceso de interfaz de usuario) que se adjunta a este subproceso, por lo que hace que se congele la interfaz de usuario hasta que finalice su tarea. Pero en la prueba esto no sucede y actúa como si estuviera en un hilo de fondo y realiza su tarea en paralelo. Solía crear Handle así:
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 35000; i++) {
log.i(TAG,"log in Handler:"+i);
}}
};
mainHandler.post(runnable);
log.i(TAG,"log outSide");
In mainActivity (por lo que el controlador debe estar vinculado al hilo principal). Entonces, ¿cuál es el problema con esto o estoy creando el controlador de manera incorrecta?
Algunos amigos notan quedoSomthing()
no es lo suficientemente complicado, pero por qué vemos "log outSide" antes de "log in Handler:" si están en el mismo hilo.