2010-10-08 19 views
6

Sto riscontrando un problema con looper Android. Ho una classe che ha esteso AsynTask. All'interno del metodo doInBackground() ho Looper.prepare() e un codice sotto.Android: è possibile creare un solo Looper per thread

Funziona bene e va bene per la prima volta, ma dopo dà un'eccezione "È possibile creare un solo Looper per thread".

Sembra che alcune soluzioni utilizzino Looper.quit() ma non sono in grado di implementarlo.

Qualsiasi aiuto sarà apprezzato.

+1

Mi sembra che Looper.quit() sia quello che ti serviva qui. Nella documentazione dell'API di Android, è chiaramente indicato che "Assicurati di chiamare loop() dopo aver chiamato questo metodo e terminarlo chiamando quit()". – onlygo

+0

Cosa intendi con "non sono in grado di implementarlo"? – methode

+0

Intendo dire che non sono in grado di trovare quit() all'interno di Looper. Mostra getMainLooper, myLooper(), loop(), myQueue(), prepare(), prepareMainLooper() ma non quit(). – viv

risposta

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

Basta aggiungere il seguente controllo.

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 –

Problemi correlati