Qual è la differenza tra Service, Async Task & Thread. Se non sbaglio tutti sono usati per fare alcune cose in background. Quindi, come decidere quale utilizzare e quando?
Qual è la differenza tra Service, Async Task & Thread. Se non sbaglio tutti sono usati per fare alcune cose in background. Quindi, come decidere quale utilizzare e quando?
Risposte:
Probabilmente hai già letto la descrizione della documentazione su di loro, non li ripeterò, invece cercherò di dare una risposta con le mie parole, spero che ti aiuteranno.
Il servizio è come un'attività ma non ha un'interfaccia utente. Probabilmente se vuoi recuperare il tempo, ad esempio, non creerai un'attività vuota per questo, per questo utilizzerai un Servizio.
Un thread è un thread, probabilmente lo sai già da un'altra parte. Devi sapere che non puoi aggiornare l'interfaccia utente da un thread. È necessario utilizzare un gestore per questo, ma leggere più avanti.
Un AsyncTask è un thread intelligente che si consiglia di utilizzare. Intelligente in quanto può aiutare con i suoi metodi, e ci sono tre metodi che vengono eseguiti sul thread dell'interfaccia utente, il che è utile per aggiornare i componenti dell'interfaccia utente.
Sto usando i servizi, AsyncTasks frequentemente. Discussione di meno o per niente, poiché posso fare quasi tutto con AsyncTask.
Questa è la risposta più semplice per la tua domanda
Filo
è un'unità di esecuzione che esegue "parallelo" al thread principale è un punto importante, non è possibile aggiornare un componente dell'interfaccia utente da qualsiasi thread qui tranne il thread principale.
AsyncTask
è un thread speciale, che ti offre metodi di supporto per aggiornare l'interfaccia utente, quindi in pratica puoi aggiornare l'interfaccia utente anche se AsyncTask verrà eseguito su un thread in background. La gestione delle comunicazioni tra processi non deve essere eseguita in modo esplicito.
Servizio
risolvere il problema sopra perché vive separato dall'attività che lo richiama in modo che possa continuare a funzionare anche quando l'attività viene distrutta, viene eseguita nel thread principale (attenzione a ANR) utilizza un servizio in background (estendi IntentService crea automaticamente il thread di lavoro per te) . Il servizio è come un'attività senza interfaccia utente , è utile per attività lunghe
Poche altre informazioni vorrei che qualcuno mi avesse detto qualche giorno fa:
Il mio caso d'uso è il seguente: ho un thread nello spazio globale collegato a un server e un'attività che mostra i risultati. Quando l'utente preme il pulsante Home, l'attività passa in background e viene avviato un nuovo servizio. Questo servizio quindi legge i risultati dal thread e visualizza le informazioni nell'area di notifica quando necessario. Non mi preoccupo che il sistema operativo distrugga la mia attività perché so che finché il servizio è in esecuzione non distruggerebbe il thread.
Dal punto di vista dello sviluppatore:
Thread : utilizzato per eseguire il set di codici in parallelo al thread principale. Ma non puoi gestire l'interfaccia utente all'interno del thread. Per questo è necessario utilizzare Handler
. Hadler funziona come thread ma può anche gestire l'interfaccia utente.
ASyncTask : utilizzato per gestire quelle attività che non è possibile far funzionare sul thread principale. Ad esempio, una richiesta HTTP è un lavoro molto pesante che non può essere gestito sul thread principale, quindi gestisci la richiesta HTTP in ASyncTask
Funziona in parallelo con il thread principale in modo asincrono in background. Ha pochi metodi di callback che sono invocati sul loro corrispondente eventi.
Servizio : è un processo in background. Viene utilizzato quando è necessario eseguire alcune elaborazioni a cui non è associata alcuna interfaccia utente.
Service
non sarà necessario eseguire in background a meno che non lo si usi IntentService
. Se hai avviato uno standart Service
da UiThread, verrà eseguito su UiThread.
Service
non verrà eseguito in un processo diverso per impostazione predefinita, ma nel processo dell'app con gli altri componenti. Meglio dire che Service
verrà eseguito sullo sfondo del thread all'interno del quale vive.