18

Perché dovrei usare AsyncTaskLoader, e quando io preferirei CursorLoader e viceversa?Differenza tra CursorLoader e AsyncTaskLoader

Nella versione ufficiale page, viene mostrato l'esempio di applicazione app, che utilizza AsyncTaskLoader anziché CursorLoader.

Quali sono i vantaggi e gli svantaggi di questi due? Ho letto da qualche parte su CursorLoader che non si preoccupa della modifica del contenuto (in sqlite).

Grazie!

risposta

23

AsyncTaskLoader è un Loader astratto che fornisce un AsyncTask per eseguire il lavoro. Solitamente si estrae AsyncTaskLoader per creare il proprio caricatore personalizzato. La differenza chiave tra l'utilizzo di AsyncTask e l'utilizzo di AsyncTaskloader è che le modifiche di configurazione (come modifica dell'orientamento) non influiscono su AsyncTaskLoader e sui suoi processi poiché AsyncTaskLoader ha il proprio ciclo di vita, mentre le modifiche alla configurazione influiscono negativamente su AsyncTask poiché è connesso al ciclo di vita dell'attività dell'host.

CursorLoader è un programma di caricamento che esegue una query su ContentResolver e restituisce un cursore. Questa classe implementa il protocollo Loader in un modo standard per l'interrogazione dei cursori. Non è altro che un AsyncTaskLoader.

In breve, è possibile utilizzare AsyncTaskLoader quando è necessario creare un caricatore personalizzato estendendo AsyncTaskLoader < D> dove D = "anything_you_want_to_load". E tu usi CursorLoader quando devi implementare un caricatore che carica il cursore (di solito usato quando hai i dati di caricamento da un database).

1

AsyncTaskLoader È una particolare sottoclasse di Caricatori che interessa. Questa classe svolge la stessa funzione dell'AsyncTask, ma un po 'meglio. Ci sono alcuni problemi con l'utilizzo AsyncTasks, però:

modifiche di configurazione possono complicare le cose Messa in pausa di un'attività non mettere in pausa l'AsyncTask una discreta quantità di codice standard (che significa più errori possibili)

Può gestire le modifiche alla configurazione delle attività più facilmente e si comporta nei cicli di vita di Fragments and Activities. La cosa bella è che AsyncTaskLoader può essere utilizzato in qualsiasi situazione in cui viene utilizzato AsyncTask. Ogni volta che i dati devono essere caricati in memoria per l'attività/frammento da gestire, AsyncTaskLoader può fare meglio il lavoro.

La bellezza del Loader è che gestisce alcuni dei "trucchi" che di solito vengono persi quando si utilizza AsyncTask. Principalmente, gestisce le modifiche alla configurazione delle attività (IE quando l'utente ruota lo schermo).

D'altra parte, CursorLoader splende davvero quando si utilizzano i cursori all'interno di Android per estrarre i dati. La classe Loader svolge un ottimo lavoro di aggiornamento delle informazioni del cursore (e, a sua volta, dell'interfaccia utente) ogni volta che i dati sottostanti cambiano. Ciò è estremamente utile quando le informazioni cambiano spesso e non si desidera interrompere l'interfaccia utente e qualsiasi cosa l'utente stia facendo attualmente, solo per visualizzare alcune nuove informazioni.

+0

In attesa che qualcuno confermi – Nabin

0

Le differenze di CursorLoader e AsyncTaskLoader sono

  • AsyncTaskLoader può essere utilizzato per restituire gli oggetti personalizzati ma CursorLoader ritorni soltanto Cursore
  • CursorLoader può ricevere getContext().getContentResolver().notifyChange(uri, null); ma AsyncTaskLoader non riceve.
4

Una cosa degna di nota è che CursorLoader è un'implementazione concreta di AsyncTaskLoader<D>. Fondamentalmente, CursorLoader può essere pensato come uno AsyncTaskLoader creato appositamente per gestire gli oggetti Cursor.