2010-01-11 9 views
2

Je fais un IPC entre une activité client et un service utilisant AIDL. ServiceConnection.onServiceConnected() semble s'exécuter lors de la liaison du service avec bindService(). Cependant, après l'appel de unbindService() lors de la publication du Service, il n'y a aucune indication que ServiceConnection.onServiceDisconnected() soit exécuté. Quelqu'un peut-il donner un aperçu de la raison pour laquelle cela se produit?AIDL ServiceConnection.OnServiceDisconnected() non appelé

trouvé un autre thread sur cette question ici: When does ServiceConnection.onServiceDisconnected() get called?

Ce qui ne répond pas tout à fait ma question. Mon service n'a pas échoué à aucune exception.

Voilà mon service obligatoire et libérant le code:

//bind service 
private void initService() 
{ 
    conn = new NetServiceConnection(); 
    Intent i = new Intent(); 
    i.setClassName("framework.network", "framework.network.NetService"); 
    bindService(i, conn, Context.BIND_AUTO_CREATE);//This returns TRUE 
} 

//unbind service 
private void releaseService() 
{ 
    unbindService(conn); 
    conn = null; 
} 

class NetServiceConnection implements ServiceConnection 
{ 

    //THIS RUNS FINE 
    public void onServiceConnected(ComponentName name, IBinder service) { 
     mService = INetService.Stub.asInterface(service); 
      Log.d("ADDERSERVICECLIENT","onServiceConnected"); 
    } 

    //THIS DOESN'T RUN 
    public void onServiceDisconnected(ComponentName name) { 
     mService = null; 
     Log.d("ADDERSERVICECLIENT","onServiceDisconnected"); 
    } 
}; 

Toute aide est très appréciée. Merci d'avance.

Répondre

4

Je ne comprends pas comment la question que vous avez lié à est différent de celui-ci? Vous n'appelez pas — que vous appelez manuellement unbindService(), il n'y a donc aucune condition d'erreur qui provoquerait l'appel de onServiceDisconnected().

4

OnServiceDisconnected() est appelée lorsqu'une connexion au service a été perdu. Cela se produit généralement lorsque le processus hébergeant le service a planté ou a été tué.

de manière :::

plus simple Ceci est appelé lorsque la connexion avec le service a été déconnecté de manière inattendue - qui est, son processus devient écrasements.

Espérons que cela résout votre problème.

Questions connexes