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;
    }

questionAnswers(3)

yourAnswerToTheQuestion