Esperando que el hilo termine sin bloquear el hilo de la interfaz de usuario
Estoy ejecutando un Thread dentro de methode y quiero devolver un valor una vez que termine el hilo, el problema que traté de hacer join (), pero que bloquea el hilo de la interfaz de usuario. ¿Cómo podría esperar a que el hilo para terminar y luego devolver el valor sin bloquear el hilo de interfaz de usuario?
Boolean foo(){ myThread mt = new myThread(); mt.start(); return mt.isSentSuccessfully; }
- Handler no entrega un mensaje o un Runnable al subproceso principal
- Lo que se mata con el hilo de la interfaz de usuario de Android
- ¿Cómo evitar la espera en el hilo principal cuando se añaden los encabezados a las solicitudes de retrofit?
- Cómo setText de un hilo independiente en Android
- Android: "Actualizar automáticamente" después de un tiempo determinado
- Cómo esperar el inicio de un subproceso en java
- Llamar a un AsyncTask de otro AsyncTask
- ¿Cuáles son las consecuencias si intentamos conectar un hilo nativo permanentemente a la DVM (JVM)?
- Cómo ejecutar un hilo Runnable en Android?
- Clase de aplicación que se ejecuta en el hilo de interfaz de usuario o?
- ¿Cómo funciona maximumPoolSize de ThreadPoolExecutor?
- Cuando ejecuto el subproceso segundo tiempo: java.lang.IllegalThreadStateException: El hilo ya comenzó
- Llamada Hilo principal de hilo secundario en Java / Android
Puedes usar Android AsyncTask
para eso. http://developer.android.com/reference/android/os/AsyncTask.html Cuando lo uso, pongo la tarea de fondo en una clase que extiende AsyncTask
y sobrescribir los onPreExecute()
y onPostExecute(..)
para mostrar / Ocultar el ProgressDialog
. Funciona bastante bien.
Si realmente no desea utilizar el AsyncTask, entonces puede que desee definir un manejador
Entonces en tu hilo de fondo enviar un mensaje al hilo principal cuando el trabajo de fondo termina con algo como:
ActivityMainThreadClassName.this.myUpdateHandler.sendMessage(m);
Donde myUpdateHandler es el controlador que creó.
¿Intentaste encuestar a Thread.getState()
?
Algo como esto:
android.os.Handler h = new Handler(); h.postDelayed(new Runnable() { public void run () { if (thread.getState() == Thread.State.TERMINATED) { // your code here return; } h.postDelayed(this, 1000); }, 1000);
Este ejemplo debe sondear un estado de hilo cada segundo … ( no lo probé )