2010-06-15 13 views
11

Stavo cercando di ottenere lo scopo di IntentService e quando dovrei usarlo?Ulteriori spiegazioni su IntentService

Ho provato a capire dall'API, ma non i dettagli sufficienti su quello.

Esiste un'analogia tra questo e l'esecuzione di un task lungo su un thread di lavoro?

Qualsiasi ulteriore spiegazione e esempi sul motivo per cui vorrei utilizzare IntentService sarebbe molto gradita.

Grazie,

raggio.

risposta

13

Esiste qualche analogia tra questo e in esecuzione su un'attività lunga su un thread di lavoro?

IntentService gestisce la discussione per te.

quando dovrei usarlo?

Alcuni casi di utilizzo:

  • Per gli allarmi di movimentazione attivati ​​da AlarmManager
  • Per la gestione di altri eventi catturati da un manifesto-registrati BroadcastReceiver
  • Per la gestione degli eventi innescati da un widget app (tempo- aggiornamenti basati, clic sui pulsanti, ecc.)
+0

Perché è meglio utilizzare IntentService per "gestire gli allarmi attivati ​​da AlarmManager/manifest RecordReceiver registrato", cosa può fare il servizio regolare non sarà in grado di? – rayman

+0

@rayman: gestisce il thread in background e la coda di lavoro per te. – CommonsWare

+0

Penso di aver capito, ma sai un esempio che posso controllare, quindi posso vedere la leggera diffrenza tra usarlo o no? grazie. – rayman

2

I servizi Android sono i cavalli di battaglia del piattaforma. Consentono alle applicazioni di eseguire attività di lunga durata e offrono funzionalità per le applicazioni esterne. Sfortunatamente, dal momento che vengono eseguiti in background e non sono visivamente evidenti per gli sviluppatori, possono essere fonte di grattacapi. Se hai visto un ANR (attività che non risponde) o ti sei chiesto perché un servizio era in esecuzione quando non dovrebbe essere, un servizio mal implementato potrebbe essere il problema.

Il temuto ANR Diamo un'occhiata a due errori principali causa di servizi: ANR. Questi interrompono l'esperienza dell'utente e offrono all'utente la possibilità di forzare la chiusura. Ciò può portare a un utente che disinstalla l'app o che il processo in background si trova in uno stato interrotto. Il motivo è che i servizi vengono lanciati dal thread chiamante, solitamente questo è il thread dell'interfaccia utente. Servizi sempre in esecuzione. Sebbene Android fornisca meccanismi per la pianificazione e l'interruzione dei servizi, non tutti gli sviluppatori seguono le linee guida. In effetti, molti degli esempi che ho visto non menzionano nemmeno l'interruzione del servizio. Ciò può portare a prestazioni complessive più lente, confusione dell'utente e esaurimento della batteria. Immagino che gli sviluppatori Android di Google abbiano visto che questo stava diventando un problema e ha introdotto la classe IntentService in Android 1.5. La classe IntentService risolve i problemi di cui sopra e riassume tutta la gestione dei thread e il blocco del servizio dallo sviluppatore. È un modo molto semplice e potente di scaricare le attività dal thread principale dell'applicazione.

0

Lo userei ogni volta che il caso d'uso è un compito specifico che richiederà molto tempo ma ha un finale regolare.Ad esempio, i casi d'uso scritte circa sopra e anche tali attività regolari quali: -syncing -downloading risorse -pulling dati provenienti da varie fonti e la loro memorizzazione

io non mi consiglia di utilizzare quando il servizio è in esecuzione lungo in natura e non ha una fine definita. Ho visto questo fatto ed è un errore perché il modo in cui le persone finiscono per aggirare il fatto che IntentService si arresta è quello di creare blocchi per mantenere handleIntent dalla finitura o se non vogliono bloccare le prossime richieste in linea, si riavvieranno inviando di nuovo startService a se stessi. Questo è orribile e per questo tipo di scenari, dovresti semplicemente utilizzare un servizio Android regolare di lunga durata e assicurarti che sia legato a (probabilmente AUTO_CREATE) e gestisca il lavoro dal thread principale.

Problemi correlati