Ver Mensaje Individual
  #2 (permalink)  
Antiguo 19/03/2007, 16:58
daemon_free
 
Fecha de Ingreso: marzo-2006
Mensajes: 54
Antigüedad: 18 años, 6 meses
Puntos: 0
Re: Thread en aplicacion para dispositivo movil

en realidad no es obligatorio hacer la conexión en un hilo aparte, lo que sucede es que al realizar la conexión en el mismo hilo de ejecución del midlet si la conexión se demora o se cuelga vas a afectar a toda la aplicación y el usuario lo único q va a ver es una pantalla congelada.
lo usual es mostrarle al usuario algún Form q le notifique que se esta tratando de efectuar la conexión y lo imposibilite de ejecutar alguna acción "peligrosa" (por ejemplo darle de nuevo al botón 'Conectar')

si llamas a la función Thread.sleep(...) le estas diciendo al thread explicitamente q se bloquee durante el tiempo q pasas como parámetro, lo cual es exactamente lo que no quieres q suceda.

puedes resolver el problema (efectuar la conexión y obtener la respuesta) utilizando un patrón Observer. a groso modo quedaría algo así:

Código:
public interface HttpConnexionListener {
	public void onResponse( HttpConnResponse r );
}

public class ConexionHttp implements Runnable {
	private Vector<HttpConnexionListener> listeners;
	
	public void addHttpConnexionListener(HttpConnexionListener l) {
		listeners.add(l);
	}
	
	public void run(){
		// establecer la conexion
		// obtener la respuesta
		// crear un objeto HttpConnResponse
		HttpConnResponse response = ........
		// notificar a los listeners y enviarles la repuesta
		//  obtenida
		for (HttpConnexionListener hcl : listeners) {
			hcl.onResponse(response);
		}	
	}
}

public class MyMidlet extends MIDlet implements HttpConnexionListener {
	// codigo, codigo, codigo

	private WaitForm waitForm;	// la pantalla de espera

	private void conectar(){
		// mostramos la pantallita de espera
		Display.getDisplay(this).setCurrent(waitForm);

		con = new ConexionHttp(); //Nueva conexion
		// agragamos al midlet como un listener de la conexion
		//   de esta forma el midlet sera notificado cuando llegue
		//   una respuesta
		con.addHttpConnexionListener(this);
		con.start();	// iniciamos la conexion
	}

	// este metodo sera llamado por la conexion cuando tenga 
	//  una respuesta
	public void onResponse( HttpConnResponse r ) {
		procesarRespuesta(r);
	}
}
el codigo necesita un buen refinamiento pero la idea esta ahí.

de todas formas date un paseo por:
http://developers.sun.com/techtopics...es/threading2/
http://developers.sun.com/techtopics...les/threading/

saludos;

da_fr.