2010-10-08 6 views
6

J'ai un problème avec le looper Android. J'ai une classe qui a étendu AsynTask. À l'intérieur de la méthode doInBackground(), j'ai Looper.prepare() et du code ci-dessous.Android: Un seul Looper peut être créé par thread

Il fonctionne bien pour la première fois mais après cela, il donne une exception "Un seul Looper peut être créé par thread".

Il semble qu'il existe une solution pour utiliser Looper.quit() mais je ne suis pas en mesure de l'implémenter.

Toute aide sera appréciée.

+1

Il me semble que Looper.quit() est ce dont vous aviez besoin ici. Dans la documentation de l'API android, il est clairement indiqué que "Assurez-vous d'appeler loop() après avoir appelé cette méthode, et terminez-la en appelant quit()". – onlygo

+0

Que voulez-vous dire par "je suis incapable de l'implémenter"? – methode

+0

Je veux dire que je ne suis pas capable de trouver quit() à l'intérieur de Looper. Il montre getMainLooper, myLooper(), loop(), myQueue(), prepare(), prepareMainLooper() mais pas quit(). – viv

Répondre

0

Essayez ...

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

il suffit d'ajouter le contrôle suivant.

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 –

Questions connexes