Escribí un programa de Android que: tiene una actividad principal para la interfaz de usuario, y comienza un servicio. El servicio devuelve de manera oportuna la actividad de UI para actualizar las vistas. Funciona bien excepto que: si la actividad está cerrada (con ATRÁS) y comienza de nuevo, el servicio también se iniciará de nuevo (El servicio reproduce el archivo de audio, por lo que hay dos sonidos superpuestos). Uso bindService con el indicador BIND_AUTO_CREATE para iniciar y conectarme al servicio. De acuerdo con el documento, debería crear servicio solo si no existe, pero obviamente comienza otra instancia cuando se abre por segunda vez. Todo lo que quiero es que la actividad se cierre, el servicio continúe ejecutándose y, cuando la actividad se vuelva a abrir, se pueda volver a conectar al servicio. ¿Es eso posible? ¿O simplemente no entiendo el uso del servicio?¿Por qué se destruye el servicio remoto cuando se cierra la actividad principal?
Probado más: Utilice ICountService (descrito en .aidl) en lugar de CountService en bindService Intent. Se usa Destroyed cuando la actividad está cerrada.
A continuación se muestra un código de servicio que crea si ayuda.
ServiceConnection conn = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName c, IBinder b) {
Log.d("TK","Connected");
//binder = (ICountService.Stub) b;
service = ICountService.Stub.asInterface(b);
try {
service.setCallback(new ICountCallback.Stub(){
@Override
public void alert() {
Log.d("TK","alert!");
}
@Override
public void updateTime(final int sec) {
handler.post(new Runnable(){
@Override
public void run() {
indicator.setText(toText(sec));
}
});
}
});
} catch (RemoteException e) {
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName c) {
Log.d("TK","Disconnected");
}
};
private void startCountService(){
Intent i = new Intent(ICountService.class.getName());
boolean ok = context.bindService(i, conn, Context.BIND_AUTO_CREATE);
Log.d("TK", "bindService="+ok);
}
Gracias. start/stopService no funciona. Intenté más y descubrí que el servicio se destruye realmente cuando se cierra la actividad (se llama a CountService.onDestroy). El problema ahora es: ¿cómo evitar que se destruya el servicio? – Reno
@Reno: use 'startService()'. Créalo o no, funciona. – CommonsWare
Gracias. Finalmente se pone a trabajar. Ahora uso esto: cuando comienzo la actividad, 1) startService, 2) bindService sin BIND_AUTO_CREATE; cuando detenga la actividad, solo desvincularServicio, no stopService – Reno