2010-10-08 10 views
6

Mam problem z looperem systemu Android. Mam klasę, która rozszerzyła AsynTask. Wewnątrz metody doInBackground() mam Looper.prepare() i trochę kodu poniżej.Android: W jednym wątku można utworzyć tylko jednego Looper'a

Działa dobrze i dobrze po raz pierwszy, ale po tym daje wyjątek "Dla każdego wątku można utworzyć tylko jednego Looper".

Wygląda na to, że można użyć Looper.quit(), ale nie mogę go zaimplementować.

Każda pomoc zostanie doceniona.

+1

Wydaje mi się, że Looper.quit() jest tym, czego potrzebujesz. W dokumentacji Androida API wyraźnie stwierdza się, że "Należy wywołać metodę loop() po wywołaniu tej metody, a zakończyć ją przez wywołanie quit()". – onlygo

+0

Co masz na myśli mówiąc "nie jestem w stanie go wdrożyć"? – methode

+0

Mam na myśli to, że nie mogę znaleźć quit() wewnątrz Looper. Pokazuje getMainLooper, myLooper(), loop(), myQueue(), prepare(), prepareMainLooper(), ale nie zamyka(). – viv

Odpowiedz

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

Wystarczy dodać następujący czek.

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 –

Powiązane problemy