2010-10-08 11 views
6

Tengo un problema con Android looper. Tengo una clase que ha extendido AsynTask. Dentro del método doInBackground() tengo Looper.prepare() y algunos códigos a continuación.Android: solo se puede crear un Looper por cada thread

Funciona bien y bien por primera vez pero después de eso da una excepción "Solo se puede crear un Looper por hilo".

Parece que hay alguna solución para usar Looper.quit() pero no puedo implementarlo.

Cualquier ayuda será apreciada.

+1

Me parece que Looper.quit() es lo que necesita aquí. En la documentación de la API de Android, se establece claramente que "Asegúrese de llamar a loop() después de llamar a este método, y finalícelo llamando a quit()". – onlygo

+0

¿Qué quiere decir con "no puedo implementarlo"? – methode

+0

Quiero decir que no puedo encontrar salir() dentro de Looper. Muestra getMainLooper, myLooper(), loop(), myQueue(), prepare(), prepareMainLooper() pero no sale(). – viv

Respuesta

0

Try ...

Looper.getMainLooper().quit(); 
3
class LooperThread extends Thread { 
     public Handler mHandler; 

     public void run() { 
      Looper.prepare(); 

      mHandler = new Handler() { 
       public void handleMessage(Message msg) { 
        // process incoming messages here 
       } 
      }; 

      Looper.loop(); 
     } 
    } 
0
getActivity().runOnUiThread (new Thread(new Runnable() { 
    public void run() { 
     Looper.myLooper(); 
     getActivity().invalidateOptionsMenu(); 
    } 
})); 
0

Apenas añada la siguiente comprobación.

if (Looper.myLooper() == null) 
    Looper.prepare(); 
+0

http://stackoverflow.com/questions/23038682/java-lang-runtimeexception-only-one-looper-may-be-created-per-thread/24115631#24115631 –

Cuestiones relacionadas