Bound Service

Service
BoundService
- Se usa para ejecutar en segundo plano operaciones largas.
- Seguirá en memoria aunque el que lo haya invocado ya no lo esté.
- Se usa para ejecutar en segundo plano operaciones largas.
- Arquitectura cliente - servidor:
- El cliente ejecuta una función y espera un resultado.
- Debe haber un canal de comunicación.
Bound Service
- Se inicia desde una actividad mediante el método bindService()
- Existe mientras tenga componentes ligados
- Orientados para proporcionar información (a otras aplicaciones también, intent filter)
- Hay que programar interfaz cliente-servicio:
- Extender clase Binder (servicio privado de la actividad)
- Utilizar un Messenger (comunicación entre procesos)
- Utilizar AIDL (varios threads)
- Se tienen que implementar métodos principales
Métodos principales
- onCreate():
- Creación del servicio (una vez)
- onBind():
- Retorna interfaz para la comunicación cliente-servicio
- onDestroy():
- Destrucción del servicio
- onUnbind():
- Si retornamos true se llamará a onRebind() la siguiente vez que un cliente se conecte
- onRebind():
- Si queremos realizar algo diferente con los siguientes bind

Creación
- Declaración en el manifest
<service android:name=".BoundService">
<intent-filter>
<action android:name="BOUNDSERVICE"></action>
</intent-filter>
</service>
Creación
public class BoundService extends Service {
public int código = 0;
private final IBinder binder = new MyBinder();
public class MyBinder extends Binder {
BoundService getService() {
return BoundService.this;
}
@Override
public IBinder onBind(Intent arg0) {
return binder;
}
@Override
public void onDestroy() {
//TODO código para liberar recursos
}
public int multiplica() {
return codigo*5;
}
}
Utilización
- Crear Intents + llamadas:
- Intent intent = new Intent(”BOUNDSERVICE");
- en caso de haber declarado intent filter
- Intent intent = new Intent(MyActivity.this, BoundService.class);
- Intent intent = new Intent(”BOUNDSERVICE");
- bindService(intent, Connection, Context.BIND_AUTO_CREATE);
- unbindService(connection);
- Implementar connection
Utilización II
- Extender clase actividad
public class BoundServiceActivity extends Activity {
...
BoundService bService;
boolean bound = false;
Intent intent = new Intent(BoundServiceActivity.this, BoundService.class);
bindService(intent, connection, Context.BIND_AUTO_CREATE);
private ServiceConnection connection = new ServiceConnection(){
@Override
public void onServiceConnected(ComponentName className, iBinder binder){
MyBinder binder = (MyBinder) binder;
bService = binder.getService();
bound = True;
}
@Override
public void onServiceDisconnected(ComponentName arg0){
bound = false;
}
};
...
}
Utilización III
- Extender clase actividad
if (bound){
bService.codigo = 3;
int res = bService.multiplica();
}
unbindService(connection);
Lifecycle

23 - Bound Service
By androidjedi
23 - Bound Service
- 463