Domanda

Ho una schermata di accesso dell'utente.L'utente preme un pulsante di accesso e creo una intentusvice per connettersi ai miei servizi di riposo e ritornare un risultato di autenticazione.

Ora ecco la funzionalità che voglio ottenere: se l'attività è in pausa (cioè entra in background), allora il servizio intento dovrebbe ancora correre, e lo fa.Ma se utilizzo il Task Manager per uccidere l'applicazione, il servizio intento dovrebbe fermarsi, anche se in questo momento non lo è.Continua a eseguire onHandleIntent fino al completo.Se chiamoso manualmente stopSelf(), onDestroy() viene chiamato ma il metodo onHandleIntent continua ad essere eseguito.Come posso costringere il onHandleIntent a fermarsi?Chiamare il "ritorno" non è un'opzione perché potrebbe essere catturata in una chiamata del metodo di riposo.

Dovrei usare il servizio intento per questa funzionalità o qualcos'altro (come servizio o asynctask)?

È stato utile?

Soluzione

Prima di tutto, se il tuo servizio sta facendo qualcosa che vuoi fatto mentre la tua app è in esecuzione in primo piano, allora non hai bisogno di un servizio. La tua attività o la tua finestra di dialogo può semplicemente generare un thread per eseguire il tuo compito e questi thread terminano quando la tua app finisce, poiché sono nell'ambito dell'applicazione della tua app. Altrimenti, per le attività che si desidera fare tutto il tempo, quando l'utente potrebbe fare qualsiasi cosa sul dispositivo, utilizzare sicuramente un servizio.

Non sono sicuro del perché "chiamare il ritorno" non è un'opzione per te? Con questo presumo che tu intenda controllando una condizione e uscire dal loop o bloccare se la condizione è soddisfatta. Questo è generalmente come dovrebbero terminare i thread (in servizi o altrove) (anche se ci sono altri approcci ). Il thread del tuo servizio può ascoltare un evento specifico che si è verificato (come se l'attività è stata distrutta, impostando una proprietà in un file o un database quando viene chiamato il onDestroy dell'attività, anche se questo è ciò che vuoi, probabilmente non dovresti usare Un servizio), quindi run() può tornare con grazia.

Ma se questo è un compito che desideri fatto, non importa quale sia l'utente sul suo dispositivo (all'interno o all'esterno della tua app), dovrebbe essere un'attività che non dovrebbe essere interrotta dall'esterno. Dovrebbe continuare a fare finché non è finita.

Forse se è possibile definire meglio quando vuoi che questo servizio sia fermato?

Altri suggerimenti

Stop nel tuo metodo onDestroy()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top