RISOLTO: Rispondo qui, visto che ormai ho risolto il problema.
La difficoltà che incontravo era unicamente legata al salvataggio dell'intent che fa partire il servizio. Ne avevo bisogno, dato che quando l'applicazione veniva chiusa, il Service rimaneva attivo, ma riaprendo l'applicazione, la variabile accService aveva valore null, quindi il tasto Stop non funzionava.
Ho risolto semplicemente dichiarando la variabile in globale e istanziandola all'interno del metodo onCreate. In tal modo, appena l'app viene ricaricata, passando per onCreate, il tasto Stop sarà disponibile. La soluzione della variabile booleana proposta va bene, ma solo se affiancata a questo modo di gestire l'intent, poiché per chiamare il metodo stopService(intent) è obbligatorio il controllo sull'intent.
Per quanto riguarda invece il problema del metodo onSaveInstanceState, il vincitore credo sia Qlimax, anche se, dato che non mi serve più, non ho testato l'effettivo funzionamento della soluzione proposta.
Ciao ragazzi, ho un problema riguardante il salvataggio di dati quando l'applicazione va in pausa. Spiego meglio:
la mia applicazione è composta di un'Activity e un Service, l'activity ha due pulsanti, uno fa partire il service, l'altro lo stoppa. il problema è che se faccio partire il servizio, poi pigio il tasto "indietro", il servizio rimane in running (ed è quello che voglio), l'applicazione va in pause->stop ecc, poi però, quando richiamo l'applicazione e pigio il tasto "stop" non succede niente. Il problema sorge da questo check, necessario perchè l'applicazione funzioni (se tolgo l'if, l'app mi termina con un'eccezione):
private OnClickListener stopListener = new OnClickListener() {
public void onClick(View v){
if(accService != null)
stopService(accService);
}
};Il check viene sull'intent "accService", che, se appena creato attraverso il pulsante "start", è diverso da "null", ma se l'applicazione viene mandata in pausa e poi ripresa, non ne viene mantenuta memoria e quindi, trovandolo vuoto, non succede niente! Devo infatti pigiare il pulsante start e poi il pulsante stop per fermare l'esecuzione del service.
Per ovviare a questo problema ho usato questo codice:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(KEY, accService);
Log.d(tag,"OnSaveInstanceState" + accService.toString());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
accService = savedInstanceState.getParcelable(KEY);
Log.d(tag,"OnRestoreInstanceState" + accService.toString());
}Passando l'intent attraverso Bundle, in modo da non trovarlo nullo alla ripresa dell'applicazione, eppure il problema sussiste e stando al log, sembra che queste due funzioni non vengano chiamate!!!
Qualcuno sa spiegarmi che succede/ha dei suggerimenti?
grazie mille