2010-06-18 19 views
15

Ich habe mehrere Aktivitäten in meiner App, jede Aktivität ruft bindservice und unbindservice, um Daten abzurufen. In der ersten Aktivität bindservice und unbindservice funktionieren gut. In der zweiten Aktivität bindet Service-Methode (die die gleiche Dienst wieder verwendet) funktioniert gut, aber unbindservice Methode gibt Ausnahme:IllegalArgumentException: Service nicht registriert:

IllegalArgumentException: Service not registered: 

Bitte helfen.

+0

In welchen Kontexten binden Sie sich an den Dienst? – NikkyD

+0

Bitte veröffentlichen Sie das Logcat. –

+0

Bessere Diskussion: https://stackoverflow.com/questions/12277673/android-services-error-service-not-registered – dskrvk

Antwort

5

Mehrere Clients können sich gleichzeitig mit dem Dienst verbinden. Das System ruft jedoch die onBind() -Methode Ihres Service auf, um den IBinder nur dann abzurufen, wenn der erste Client bindet. Das System liefert dann denselben IBinder an alle zusätzlichen Clients, die binden, ohne onBind() erneut aufzurufen. http://developer.android.com/guide/components/bound-services.html Mehrere Komponenten können gleichzeitig an den Dienst gebunden werden, aber wenn alle von ihnen gelöst werden, wird der Dienst zerstört. Bitte überprüfen Sie, ob Sie den Dienst zum ersten Mal beenden. Kann die IBind zu jeder Aktivität viel besser übergeben.Da es nur eine zurückgibt.

+1

Stellen Sie sicher, dass Sie nur eine Verbindung pro Dienst in einer Aktivität herstellen. Ich habe versehentlich 2 Unbinds gemacht und es ist mit diesem Fehler auf dem zweiten abgestürzt. Durch das Entfernen der doppelten Bindung wurde mein Problem gelöst. – eliteslayer

9

NikkyDs Frage ist sehr gut und es half mir, die Ursache dieser Ausnahme in meinem Fall zu finden. Stellen Sie sicher, dass Ihr bindService-Aufruf und Ihr unbindService-Aufruf für denselben Kontext ausgeführt werden, da alle das gleiche Problem haben. Ich hoffe es hilft.

+0

Yep, das war genau das für mich - ich hatte eine Bindung mit dem App-Kontext, aber versehentlich hat die Bindung mit dem Activities cxt. – Maks

+0

Auch mein Problem war, dass ich Activity Context zum Binden und Application zum Binden verwendete. Du darfst das nicht tun. – Pihhan

0

Ich hatte dieses Problem mit einer alten API. (Android 2.2) ich diesen Fehler bekam, wenn ich diese Methode aufgerufen: (aus dem Fakturierungs Tutorial)

@Override 
    public void onDestroy() { 
     super.onDestroy(); 
     try { 
      if (mHelper != null) mHelper.dispose(); 
      mHelper = null; 
     }catch (IllegalArgumentException e){ 
      Log.d("TMA Billing Android 2.2","Error: "+e.getMessage()); 
      mHelper = null; 
     } 

    } 

Wie Sie sehen können, ich umgab es mit Try-Catch und jetzt funktioniert es ohne Probleme auf Android 2.2 .

Verwandte Themen