11

Ci sono dei vantaggi del programma Caricatori su Async? Inoltre, come rendere compatibili i caricatori per i telefoni con Android Froyo.Qual è il vantaggio dei caricatori su Asynctask in Android?

Edit:

Il problema principale è che non sto usando il DB nativo (SqlLite). Utilizzo del DB sul server di sviluppo. Ovviamente, non posso più usare CursorLoader. AsyncTaskLoader non ha alcun esempio. Se esiste, si prega di fare link.

È consigliabile caricare i dati richiesti nel DB locale e quindi interrogarli utilizzando CursorLoader?

+0

Forse non stai implementando il DB nativo all'interno della tua app. Ma stai interrogando i dati sul dispositivo stesso (ad es. Musica, foto, contatti, calendario, ecc.)? In tal caso, puoi comunque utilizzare CursorLoader. –

risposta

10

Sì, i caricatori sono più vantaggiosi di AsyncTask poiché si occupano di molte cose che AsyncTask non è all'altezza, miseramente.

  1. Le modifiche all'orientamento dello schermo sono difficili in AsyncTask. Avevo un problema simile, fino a quando non ho usato una classe di Controllo attività, che ho usato per mantenere la configurazione modificata. Posso darti un codice se vuoi sapere come. L'app si è inceppata, tuttavia, quando si modificavano i tempi di multiplo di orientamento anche prima che fossero caricati tutti i dati. Il segreto qui non è caricare un sacco di dati con il tuo primo thread e terminare le attività di threading il prima possibile. Anche se accade in background, Android ha un modo malandato di gestire i thread. Non sai mai quando uno dei tuoi compiti verrebbe ucciso.

  2. Anche se si utilizza un AsyncTaskLoader, assicurarsi di utilizzare un gestore attività. Questo ti aiuterà ad avere più controllo sulle attività e AsyncTask.

Sì, è compatibile con tutte le vecchie versioni di Android. È necessario includere la libreria di supporto (La maggior parte delle volte, questo è incluso di default, ma la sua sempre bello doppio controllo.)

+0

+1 AsyncTasks può diventare sgradevole. Vedi [this] (http://blogactivity.wordpress.com/2011/09/01/proper-use-of-asynctask/) – slezica

1

Per uno, i caricatori sono più facili da codificare (sono quasi integrati in Frammenti). I caricatori (in particolare CursorLoader) gestiscono anche il cursore per te (come la gestita deprecata).

Controllare questo link per leggere come utilizzare i caricatori pre-Honeycomb.

1

È più semplice implementare e occuparsi di gran parte della gestione del ciclo di vita che in precedenza doveva essere eseguita "a mano" con AsyncTasks. Vedere la risposta a questo question per ulteriori dettagli.

Per quanto riguarda il loro utilizzo con Froyo, sono disponibili tramite la libreria di compatibilità.

+0

Il problema qui è che non ho a che fare con un DB nativo. Interrogandolo dal server di sviluppo. Com'è possibile usare CursorLoader? – Hick

+0

Appena notato che hai aggiornato la tua domanda, hai guardato l'esempio AsyncTaskLoader qui http://developer.android.com/reference/android/content/AsyncTaskLoader.html – Kingamajick

0

Un altro vantaggio con i caricatori è che gestiscono l'evento di rotazione dello schermo con garbo mentre l'asynctask può darti problemi.

0

grande diff:

CursorLoader aggiornerà il contenuto di interfaccia utente, non appena il suo correlato ContentProvider cambia il suo contenuto (ad esempio attraverso un Service), mentre AsyncTask aggiornerà l'interfaccia utente solo quando lo dirai.

1

Sembra che nessuno stia parlando degli svantaggi dei caricatori! Attualmente sto lavorando su un sistema che esegue altri servizi in background.

Quello che ho notato è che non appena viene riavviata una schermata con un caricatore. Il cursore utilizzato dal caricatore blocca il DB.

Potrebbe non essere aperto a molte persone ma getDatabaseWriter da sqlite è in realtà un metodo sincronizzato e quindi il cursore utilizzato dal caricatore non viene mai chiuso finché il caricatore non viene reimpostato o terminato, bloccando così l'accesso al DB.

Non posso consigliare l'uso di un caricatore in queste circostanze, né posso consigliare l'uso di un caricatore quando il set di risultati è composto da meno di 100 articoli che sono statici e non sembrano mai cambiare.