2015-10-12 23 views
6

Sono nuovo ad Android e stavo esaminando la documentazione e alcuni tutorial.confuso tra syncAdapter, servizi, caricatori, provider e asynctask?

Servizi

guida dello sviluppatore dice che dovrebbe essere utilizzato se è necessario per eseguire una lunga attività in esecuzione in background, dicono lettore musicale.

AsyncTask

Crea un thread di lavoro per svolgere attività in background come i dati ottengono utilizzando api e quindi notificare il thread dell'interfaccia utente sul suo onPostExecute() metodo di callback.

Pale

esegue operazioni su thread separato, registri per l'ascoltatore e avvisa sui dati impostati modifiche.

Provider

Condividere i dati tra le diverse applicazioni di esponendoli nel file manifesto.

SyncAdapter

Per sincronizzazione dei dati tra dispositivi android e server web.

In senso teorico, capisco i concetti di cui sopra come quello per cui sono usati. Ho difficoltà a metterli in ordine come quando usare cosa? quale sarebbe il migliore tra loro da usare? In quali scenari cosa dovrebbe essere usato?

Per la memorizzazione nella cache, ho usato sqlite o biblioteca come volley e retrospice

Come ho detto io sono principiante Android e cercare di capire questi concetti.

Qualsiasi aiuto e suggerimento sarebbe apprezzato. Grazie in anticipo.

+0

La tua domanda è troppo ampia. Si prega di restringere specificando un caso d'uso effettivo che si desidera implementare. –

+1

Grazie per la risposta @StephanBranczyk. Volevo solo avere un'idea chiara su quali scenari, quale sarebbe l'approccio migliore da usare. Diciamo un'app per mostrare le previsioni del tempo, posso anche usare aynctask per colpire le API o il servizio meteo. Per scopi di caching posso usare sqlite o librerie come il volley. E provider di contenuti per le query e tutti gli altri scopi. Caricatore per aysnc che carica i dati e ascolta l'origine dei dati cambia a cui è associato. Sono solo curioso, come incapsulare tutte queste cose in una soluzione migliore. Perdonami, sono solo confuso riguardo a questo. – Ritesh

+1

Ecco infografica che potrebbero aiutare a capire meglio :) terza opzione sono i servizi: https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png – Kalem

risposta

9

Un paio di cose da aggiungere alla risposta di Kaleb:

ContentProvider:

Android ha in realtà molti modi per condividere i dati. ContentProvider è un modo per condividere un database tra le applicazioni. Supponiamo che tu abbia 3 client di posta elettronica sul telefono che memorizzano nella cache i dati dal cloud in caso di offline. Ha senso che tu mantenga solo un database offline delle tue e-mail. Lo stesso vale se hai una rubrica, un database sms o un database tweet. E lo stesso vale se vuoi aggiornare tutti quei dati. Vuoi davvero aggiornare quei dati solo una volta dal cloud, non tre volte ogni volta, il che mi porta al prossimo argomento, il SyncAdapter.

SyncAdapter:

Uno SyncManager è abbastanza intelligente per fare tutte le richieste di sincronizzazione in una sola volta, per ridurre al minimo il tempo l'antenna è alimentata, e quindi per risparmiare l'uso della batteria. Inoltre, con l'aiuto di AccountManager, l'utente del telefono può ignorare personalmente le preferenze di sincronizzazione, ma solo se lo sviluppatore ha scelto di utilizzare un SyncAdapter in primo luogo.

Inoltre, un SyncAdapter può essere utilizzato solo con ContentProvider. Pertanto, anche se non desideri condividere i tuoi dati con altre app, dovrai utilizzare un fornitore di contenuti se desideri utilizzare un SyncAdapter.

Detto questo, ContentProvider è molto difficile da implementare per i principianti (anche per gli sviluppatori intermedi). Ti suggerirei di stare lontano da loro per ora. Dovresti usare un ContentProvider, se ce n'è già uno per quello che vuoi fare, ma non ti consiglio di provare a crearne uno tuo.

Pale usate:

Caricatori sono buone. Impara a usarli se vuoi visualizzare i dati da un database locale (o da un ContentProvider). Ti faranno risparmiare tempo. A differenza di SyncAdapter, i caricatori non richiedono che ContentProvider funzioni. Possono accedere direttamente a SQLite.

Servizi:

imparare ad usarli. Ci sono troppe cose da dire su di loro. Un punto importante è che dovresti minimizzare il tempo in cui rimangono in vita usando componenti come AlarmManager o BroadcastRece. Inoltre, dovrai imparare la differenza tra un servizio e un IntentService.

AsyncTask:

AsyncTask è molto spesso necessario in Android per evitare di bloccare il filo principale dell'interfaccia utente. Non pensare che, poiché stai utilizzando un AsyncTask, puoi rinunciare all'uso dei Servizi.

Si noti che molte esercitazioni su Android forniscono solo la quantità minima di codice per dimostrare un concetto, quindi spesso saltano il threading corretto.Nota che puoi avviare il tuo thread manualmente se vuoi, ma AsyncTask fa altre cose per te che lo rendono la scelta ideale per molte situazioni in cui il thread dell'interfaccia utente viene bloccato e si ottiene un errore "Application Non Responding".

Biblioteche:

Ci sono molte buone biblioteche là fuori. Non dirò quali sono quelli buoni. Impara a usare quelli che tutti raccomandano. Queste librerie possono fare molto per te (supponendo che tu sia abbastanza bravo da farle funzionare). C'è un po 'di una curva di apprendimento, ma ne vale la pena. E si occupano di Android ad un livello molto più alto di astrazione, quindi di solito, il threading e molte altre cose sono di solito prese cura di te.

Ci sono molte altre cose che sto sorvolando, o che non ho menzionato affatto, ma come ho detto, penso che la tua domanda sia troppo ampia. E se vuoi davvero maggiori dettagli, dovresti accovacciarti e leggere alcune guide per gli sviluppatori e guardare alcuni dei video di YouTube forniti da Google.

+0

Grazie @Stephan, esplorerò di più sulla mia curva di apprendimento. Ha chiarito molti concetti di base. – Ritesh

+0

SyncAdapter non richiede un ContentProvider. Si crea un account stub e ContentProvider e lo si utilizza con un altro schema di persistenza. https://developer.android.com/training/sync-adapters/creating-sync-adapter.html –

+0

Evitare inoltre di utilizzare AsyncTask: http://blog.danlew.net/2014/06/21/the-hidden-pitfalls -di-AsyncTask / –

2

risposta molto veloce:

AsyncTask: breve compito che potrebbe bloccare il thread dell'interfaccia utente. Non ti dispiace se sono cancellati e devi rilanciarli.

Servizi: utilizzare quando si ha un'attività lunga che non si desidera essere interrotta dalle modifiche dell'app. Bit difficile da implementare rispetto a AsyncTask.

Pale: progettati per l'accesso al database

SyncAdapter: qui non hanno dati in tempo reale. Si pianifica la sincronizzazione dei dati in un momento opportuno (cioè sincronizzare le e-mail, i dati di contatto, ecc.). Supponiamo che tu abbia dati freschi ogni ora.

Provider: niente a che fare con quanto sopra. Questo è usato per condividere i dati tra App. Non ti interessa come i dati vengono recuperati dall'app di condivisione, sai solo che puoi chiedere una determinata risorsa.

Questo infographis mi ha aiutato a capire meglio i primi 3: https://raw.githubusercontent.com/stephanenicolas/robospice/master/gfx/RoboSpice-InfoGraphics.png

+0

Grazie @kalem, per questa ottima risposta veloce. Ha eliminato la maggior parte dei concetti correlati. Soprattutto, l'infographis che hai condiviso. Ma sto ancora sperando di ottenere una risposta dettagliata. – Ritesh