oas práticas para serviços no Android
Atualmente, estou usando dois serviços no meu aplicativo:
1: LocationService, basicamente tentando localizar o usuário e tem como objetivo permanecer ativo apenas quando o aplicativo estiver em primeiro plano.
2: XmppService, que inicia a conexão com o servidor xmpp, recebe mensagens, envia, efetua logout ... e visa permanecer ativo até o logout do usuári
Eu tenho lido bastante documentação, mas não posso deixar clar
Estou tendo Vazamentos quando tento armazenar referência de LocationServiceBinder, que é usado para chamar minhas funções de serviço sando interfaces AI). Mesmo para Xmpp. Quando desisto, às vezes recebo ANR que parece estar relacionado ao fato de que meu vínculo / desenlace é estranhamente feito, onResume, onRestart ...).
Todoso sistema está funcionando, mas tenho certeza de que não é o caminho certo para fazê-lo e, por favor, adoraria seguir pessoas experientes para voltar ao lado certo da força! :)
Felicidade
ATUALIZA
@My Location Service está vinculado no lançamento do aplicativo para obter o mais rápido possível a posição do usuário:
if(callConnectService == null) {
callConnectService = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder binder) {
locationServiceBinder = LocationServiceBinder.Stub.asInterface(binder);
try {
global.setLocationBinder(locationServiceBinder);
global.getLocationBinder().startLocationListener();
} catch (Exception e){
Log.e(TAG, "Service binder ERROR");
}
}
public void onServiceDisconnected(ComponentName name) {
locationServiceBinder = null;
}
};
}
/* Launch Service */
aimConServ = new Intent(this, LocationService.class);
boolean bound = bindService(aimConServ,callConnectService,BIND_AUTO_CREATE);
@My Xmpp Service é iniciado quando o usuário faz login:
callConnectService = new ServiceConnection ()
public void onServiceConnected(ComponentName name, IBinder binder) {
try {
, Log.d(TAG, "[XMPP_INIT] Complete.");
global.setServiceBinder(ConnectionServiceBinder.Stub.asInterface(binder));
//Connect to XMPP chat
global.getServiceBinder().connect();
} catch (Exception e){
Log.e(TAG, "Service binder ERROR ");
e.printStackTrace();
}
}
public void onServiceDisconnected(ComponentName name) {
Log.e(TAG, "Service binder disconnection ");
}
};
/* Launch Service */
Intent aimConServ = new Intent(MMWelcomeProfile.this, XmppService.class);
bound = bindService(aimConServ,callConnectService,Context.BIND_AUTO_CREATE);
e desanuviar em cada atividade:
if (callConnectService != null){
unbindService(callConnectService);
callConnectService = null;
}