Attualmente ho un servizio che funziona correttamente quando lo avvio ma quando provo a fermarlo usando il metodo stopService il suo metodo onDestroy non viene chiamato.Il servizio non si interrompe quando viene chiamato il metodo stopService
Ecco il codice che uso per cercare di fermare il Servizio
stop_Scan_Button = (Button) findViewById (R.id.stopScanButton);
stop_Scan_Button.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Log.d("DEBUGSERVICE", "Stop Button pressed");
Intent service = new Intent(CiceroEngine. CICERO_SERVICE);
releaseBind();
Log.d("Stop_Scan_Button", "Service: " + service.toString());
stopService(service);
Log.d("Stop_Scan_Button", "Service should stop! ");
}
});
Ho ragione nel pensare che quando stopService viene utilizzato chiama il metodo onDestroy del Servizio? Quando premo il tasto stop scan, il metodo onDestroy()
nel mio servizio non viene chiamato.
C'è qualcos'altro che mi manca che dovrei inserire per interrompere il servizio?
MODIFICA: per aggiungere onServiceConnected()
viene chiamato quando stopService viene eseguito anziché onServiceDisconnected()
, perché ciò accadrebbe?
EDIT: Per aggiungere ulteriori informazioni riguarda Binding
io chiamo bindService nel onCreate() e poi ho il metodo releaseBind() non associare il Servizio.
Qui è il codice per quel metodo:
public void releaseBind(){
unbindService(this);
}
quindi suppongo che la non vincolante non è il mio problema?
Ho modificato la mia domanda iniziale per includere informazioni circa il mio legame, io ho vincolante e quindi non vincolante –
Ummm, che il codice è totalmente incasinato ed è quasi certamente contribuendo al tuo problema. 'bindService()' e 'unbindService()' sono asincroni e sono garantiti fallire nel modo in cui li si sta usando. Sfortunatamente, non ho idea di cosa stai cercando di realizzare qui, quindi non ho un buon modo di consigliarti ulteriormente. – CommonsWare
È solo un'interfaccia utente a due pulsanti, uno per avviare il servizio e uno per arrestarlo. ho preso l'istruzione if fuori del mio metodo releaseBind() lasciando solo unBindService (questo); Sembra annullare la registrazione del servizio poiché quando faccio clic su di esso una seconda volta viene visualizzato l'errore "Servizio non registrato". Tuttavia, StopService ancora non sembra chiamare il metodo OnDestroy() nel mio servizio, i servizi in background funzionano ancora –