Red de conocimiento informático - Problemas con los teléfonos móviles - Programación de hilos

Programación de hilos

No se puede actualizar la interfaz de usuario en un hilo secundario. Aquí hay un ejemplo que escribí antes. Escuche, utilice el mecanismo de mensajería del controlador.

La clase pública HandlerDemoActivity extiende Activity para implementar OnClickListener {

Botón btn1, btn2

ProgressBar ProgressBar

actualizar controlador de datos controlador de datos actualizado;

HandlerThread handlerThread

/** Se llama cuando se crea la actividad por primera vez. */

@Override

public void on create(Estado de instancia guardado del paquete){

super oncreate(savedInstanceState);

setContentView. (r . diseño . principal);

BTN 1 =(Botón)findViewById(r . id . BTN 1);

Bt N2 =(Botón)findViewById(r . id . Bt N2);

barra de progreso =(barra de progreso)findViewById(r . id . barra de progreso 1

btn1.setOnClickListener(this); Bt N2. setonclicklistener(this);

}

/**

* Personaliza una clase para heredar la clase Handler y anular la función handleMessage.

*Y requiere un constructor con un objeto Looper.

*Bucle para detectar si hay algún mensaje. Si hay un mensaje, se llamará a handleMessage para recuperar los datos.

*Si no hay ningún mensaje, ingresa al estado de espera.

* @authoradmin

*

*/

Controlador de extensión Class UpdateDataHandler {

controlador de datos de actualización pública (Looper Looper){

Super(looper);

}

@override

public void handleMessage(Mensaje de mensaje) {

super .manejar mensaje(msg);

sistema . println("-" hilo. hilo actual(). getId()); bar .set Progress(msg .arg 1); //Obtener datos de la cola de mensajes y actualizar el control.

updatedatahandler . post(print runnable);

}

}

runnable print runnable = newrunnable(){//Implementar uno Clase de hilo.

int I = 0;

@override

Public void run() {// Reescribe la función de ejecución en la clase de subproceso.

I = 20;

mensaje msg = controlador de datos actualizado. obtener mensaje(); //Obtener el objeto de mensaje del controlador.

msg .arg 1 = I; //Colocar datos en el objeto de mensaje.

//msg . obj = obj; //También se pueden enviar algunos objetos.

//msg . setdata(); //Puedes enviar un objeto Bundle.

Pruebe {

thread . sleep(1000); // Pausa durante 1 segundo

} catch (InterruptedException e) {

e . printstacktrace();

}

system out . , La operación finaliza.

{

updatedatahandler . remove callbacks(print runnable); // Libera la clase de hilo del controlador

Return;

//msg . sendtotarget(); //Esta función también se puede utilizar para enviar mensajes.

actualizar controlador de datos. sendmessage(msg); //Coloca el objeto de mensaje en la cola de mensajes.

}

};

@override

public void onClick(ver v) {

if( v == btn1)

{

handler thread = new handler thread(" "); // HandlerThread es un hilo y hereda de Thread. Contiene una referencia a la instancia de Looper.

handler thread . start(); //Asegúrate de llamar a la función de inicio del hilo.

controlador de datos actualizados = nuevo controlador de datos actualizado(hilo del controlador. get looper());

controlador de datos actualizados.

System.out.println; ("Hilo principal" Thread.currentThread().getId());

}

}

}