Android java.lang.IllegalArgumentException: Service non enregistré

J'ai une configuration qui ressemble à quelque chose comme ceci:

class MyFragment implements SomeEventListener {

    Application mAppContext;    

    boolean mBound;
    boolean mDidCallUnbind;
    MyIBinder mBinder;
    ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mBound = true;
            mBinder = (MyIBinder) service;
            mBinder.getThings();...
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            mDidCallUnbind = false;
            mBound = false;
            mBinder = null;
        }
    };

    ...

    @Override
    public void onSomeEvent() {
        mAppContext.bindService(...);
    }

    void unbindService() {
        if (mBound && !mDidCallUnbind) {
            mDidCallUnbind = true;
            mAppContext.unbindService(mConnection);
        }
    }

    @Override
    public void onPause() {
        unbindService();
        super.onPause();
    }
}

Cependant, je suis toujours de voir l'erreur dans le titre, de temps à autre: java.lang.IllegalArgumentException: Service not registered être générée lorsque unbindService() est appelé. Ai-je raté quelque chose de stupide, ou est-il plus? Je note qu'il peut y avoir plus d'un de ce même fragment dans l'existence.

Modifier

Puisque personne ne semble en fait à la lecture du code, laissez-moi vous expliquer. unbindService() n'appelle pas Context.unbindService(ServiceConnection) à moins que le service est lié (mBound) et il n'avait pas été appelé avant la onServiceDisconnected(...) de rappel a été frappé par un possible appel précédent à unbindService().

Que, dans l'esprit, il n'existe aucun cas où Android séparer votre service pour vous tels que le service allait devenir indépendant mais onServiceDisconnected ne serait pas appelé ainsi, me laissant dans un état de l'état?

Aussi, je suis à l'aide de mon contexte de l'Application à faire de la consolidation initiale. Penser à quelque chose comme:

@Override
public void onCreate() {
    mApplication = getContext().getApplicationContext();
}
  • Si onSomeEvent() n'arrive jamais avant onPause() puis votre service n'est pas lié.
  • clairement. Avez-vous lu mon code?
  • Oui. Vous n'avez pas indiqué où vous initialisez mAppContext, quel contexte utilisez-vous?
  • le contexte de l'application. mAppContext est de type Application.
  • avez-vous trouver la cause ou la solution? Merci à l'avance...
  • Je n'ai pas. Nous sorta restructuré un peu de sorte qu'il n'était pas un problème, mais à ce jour je ne sais pas ce qui était en haut.
  • J'ai eu le même problème. Cette stackoverflow.com/a/16713212 réponse aidé.
  • génial! Qui pourrait expliquer qu'il soit. Merci.

InformationsquelleAutor dcow | 2014-02-27