Se si avvia un servizio utilizzando startService(), è necessario interromperlo utilizzando stopService().
Esistono due motivi per cui un servizio può essere eseguito dal sistema. Se qualcuno chiama Context.startService(), il sistema recupera il servizio (creandolo e chiamando il suo metodo onCreate() se necessario) e quindi chiama il suo metodo onStartCommand (Intent, int, int) con gli argomenti forniti dal client. A questo punto il servizio continuerà fino a quando viene chiamato Context.stopService() o stopSelf(). Si noti che più chiamate a Context.startService() non si annidano (sebbene risultino in più chiamate corrispondenti a onStartCommand()), quindi indipendentemente dal numero di volte in cui viene avviato, un servizio verrà arrestato una volta Context.stopService() o stopSelf() è chiamato; tuttavia, i servizi possono utilizzare il loro metodo stopSelf (int) per garantire che il servizio non venga arrestato finché non sono stati elaborati gli intenti avviati.
È possibile associare al servizio tutti i ServiceConnection desiderati con bindService(), ma prestare attenzione alla bandiera che gli è stata passata. Se si passa 0, se si chiama stopService() il servizio verrà interrotto (non so in modo esatto cosa succede a ServiceConnection). Altrimenti se vuoi che il tuo servizio sia attivo fino a che ServiceConnection viene associato ad esso, usa BIND_AUTO_CREATE.
questo da StopService():
Richiedere che un determinato servizio applicazione essere fermato. Se il servizio non è in esecuzione, non succede nulla. Altrimenti viene fermato. Si noti che le chiamate a startService() non vengono conteggiate: ciò interrompe il servizio, indipendentemente dal numero di volte in cui è stato avviato.
Si noti che se un servizio arrestato ha ancora oggetti ServiceConnection ad esso associati con il set BIND_AUTO_CREATE, non verrà distrutto fino a quando tutti questi binding non verranno rimossi. Consultare la documentazione del servizio per ulteriori dettagli sul ciclo di vita di un servizio.
Questa funzione genererà SecurityException se non si dispone dell'autorizzazione per interrompere il servizio specificato.
Spero che questo aiuta ..
come si esegue il binding a un servizio avviato con startService()? – user123321
@musselwhizzle: questa domanda è estremamente vecchia. Se hai una domanda, inizia una nuova discussione di domande. Ma non c'è differenza nel metodo in cui ti colleghi a un servizio che è già in esecuzione. – Falmarri
Si noti inoltre che, per avere un servizio completamente rimosso dal ciclo di vita di un'attività, avviare il servizio passando il contesto dell'applicazione. Ciò significa che il servizio è legato al ciclo di vita dell'applicazione piuttosto che all'attività. Inoltre, controlla START_STICKY. Il riavvio iniziale e il contesto dell'applicazione consentono di eseguire il servizio rimosso dal ciclo di vita dell'applicazione e di riavviarsi autonomamente nel caso in cui non riesca prima di completare lo scopo. – superuserdo