2011-03-13 15 views
15

No soy bueno en inglés, pero trataría de explicar mi problema de buena manera.
Android, servicio de desvinculación y problemaServicio desconectado

Por lo tanto, el problema es:
1) Tengo un servicio local
2) lo comienzo y luego ligados a ella. 3) El problema aparece cuando estoy a punto de cerrar ese servicio. onServiceDisconnected método desde mi implementación de la clase ServiceConnection nunca se llama. Si lo cierro manualmente (desde la configuración), o por desvincularServicio, o por stopService, o por combinación de unbindService y stopService - onServiceDisconnected aún no se puede llamar. ¿Qué estoy haciendo mal?

código corto es el siguiente:

protected ServiceConnection mServerConn = new ServiceConnection() { 
    @Override 
    public void onServiceConnected(ComponentName name, IBinder binder) { 
     Log.d(LOG_TAG, "onServiceConnected"); 
    } 

    @Override 
    public void onServiceDisconnected(ComponentName name) { 
     Log.d(LOG_TAG, "onServiceDisconnected"); 
    } 
} 

public void start() { 
    // mContext is defined upper in code, I think it is not necessary to explain what is it 
    mContext.bindService(i, mServerConn, Context.BIND_AUTO_CREATE); 
    mContext.startService(i); 
} 

public void stop() { 
    mContext.stopService(new Intent(mContext, ServiceRemote.class)); 
    mContext.unbindService(mServerConn); 
} 

Estoy probando este código bajo emulador de Android 2.2

Respuesta

23

onServiceDisconnected sólo se le llama en situaciones extremas (troceado/muerto).

que es muy poco probable que suceda para un servicio local ya que todos los componentes de su aplicación normalmente se ejecutan en el mismo proceso ... es decir, a menos que intencionalmente desvincula o destruya el servicio, debe permanecer conectado o morir con el componente usando eso.

+1

Ok, gracias. No pensé, que es un error o algo más. Así que copié datos de aguja (código) de onServiceDisconnected() a stop(). Ahora funciona como yo quería. – UAS

+0

esto es correcto. pero después de llamar a unbindService (connection) también, puedo llamar al método público presente en la clase myservice (servicio). entonces, no hay ningún significado con el método unbindservice() ¿correcto? Pero el servicio se destruye al llamar a Destroy(). – yokks

1

Utilicé Context.BIND_AUTO_CREATE en bindService. He buscado el mismo problema después de aplicar su trabajo perfecto para mí.

bindService(new Intent(this,XMPPService.class),mConnection, Context.BIND_AUTO_CREATE);