2010-06-18 13 views
15

Ho più attività nella mia app, ogni attività chiama bindservice e unbindservice per recuperare i dati. Nella prima attività bindservice e unbindservice funzionano bene. Nella seconda attività (che riutilizza lo stesso servizio) metodo di servizio si legano funziona bene, ma unbindservice metodo dà eccezione:IllegalArgumentException: servizio non registrato:

IllegalArgumentException: Service not registered: 

prega di aiuto.

+0

quali contesti si utilizzano per associare al servizio? – NikkyD

+0

Si prega di inviare il logcat. –

+0

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

risposta

5

Più client possono connettersi al servizio in una sola volta. Tuttavia, il sistema chiama il metodo onBind() del servizio per recuperare l'IBinder solo quando il primo client esegue il bind. Il sistema consegna quindi lo stesso IBinder a qualsiasi altro client che si colleghi, senza chiamare nuovamente Bind(). http://developer.android.com/guide/components/bound-services.html Più componenti possono associarsi al servizio in una sola volta, ma quando tutti si separano, il servizio viene distrutto. Quindi, per favore controlla se hai ucciso il servizio alla prima volta. Potrebbe passare la IBind a tutte le attività molto meglio. Perché ne restituisce solo una.

+1

Accertati di effettuare un solo unbind per servizio in un'attività. Stavo facendo 2 unbinds accidentalmente e si è schiantato con questo errore sul secondo. La rimozione del duplicato unbind ha risolto il problema. – eliteslayer

9

La domanda di NikkyD è molto buona e ha aiutato a trovare la causa di questa eccezione nel mio caso. Per chiunque esista lo stesso problema, assicurati che le tue chiamate bindService call e unbindService vengano eseguite sullo stesso contesto. Spero che sia d'aiuto.

+0

sì, è stato esattamente questo per me: ho eseguito il binding con il contesto dell'app, ma per sbaglio ho fatto il unbind con il cxt delle attività. – Maks

+0

Anche il mio problema era che ho usato Activity Context per legare e Application to unbind. Non devi farlo. – Pihhan

0

Ho riscontrato questo problema con una vecchia API. (Android 2.2) ho ottenuto questo errore quando ho chiamato questo metodo: (dal tutorial di fatturazione)

@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; 
     } 

    } 

Come potete vedere, mi cinse di Prova Cattura e ora sta lavorando senza alcun problema su Android 2.2 .

Problemi correlati