java android loader




Puoi usare LoaderManager da un servizio? (2)

Qualcuno sa perché LoaderManager è stato escluso dal servizio?

Come indicato nell'altra risposta, LoaderManager stato appositamente progettato per gestire i Acivities attraverso i cicli di vita di Acivities and Fragments . Poiché i Services non hanno queste modifiche alla configurazione da gestire, l'uso di LoaderManager non è necessario.

Se no c'è un modo per aggirare questo?

Sì, il trucco è che non hai bisogno di usare un LoaderManager , puoi solo lavorare direttamente con il tuo Loader , che gestirà il caricamento in modo asincrono dei dati e il monitoraggio delle eventuali modifiche ai dati sottostanti, il che è molto meglio che eseguire manualmente i dati.

Per prima cosa crea, registra e inizia a caricare il tuo Loader quando viene creato il Service .

@Override
public void onCreate() {
    mCursorLoader = new CursorLoader(context, contentUri, projection, selection, selectionArgs, orderBy);
    mCursorLoader.registerListener(LOADER_ID_NETWORK, this);
    mCursorLoader.startLoading();
}

Successivamente, implementa OnLoadCompleteListener<Cursor> nel tuo Service per gestire i callback del caricamento.

@Override
public void onLoadComplete(Loader<Cursor> loader, Cursor data) {
    // Bind data to UI, etc
}

Infine, non dimenticare di ripulire il tuo Loader quando il Service viene distrutto.

@Override
public void onDestroy() {

    // Stop the cursor loader
    if (mCursorLoader != null) {
        mCursorLoader.unregisterListener(this);
        mCursorLoader.cancelLoad();
        mCursorLoader.stopLoading();
    }
}

Ho un sistema di caricamento dei dati impostato usando un caricatore e un cursore personalizzato che funziona bene da Attività e Frammenti ma non c'è LoaderManager (che io possa trovare) in Servizio. Qualcuno sa perché LoaderManager è stato escluso dal servizio? Se no c'è un modo per aggirare questo?


Sfortunatamente no. I caricatori sono stati progettati per attività e frammenti al fine di gestire in modo pulito le modifiche alla configurazione che si verificano in Activites and Fragments. Ad es. Rotazione del dispositivo e ricollegamento ai dati esistenti.

Un servizio non ha alcuna modifica alla configurazione, si posizionerà in background fino a quando non verrà completato o il sistema è obbligato ad eliminarlo. Quindi, supponendo che tu stia eseguendo il tuo codice su un thread in background nel tuo Servizio (che dovresti comunque), non c'è motivo di usare un Loader. Basta effettuare le chiamate necessarie per interrogare i dati.

Quindi se il tuo servizio è solo un IntentService, puoi scrivere la tua logica per interrogare i tuoi dati con il cursore nel metodo onHandleIntent ().

http://developer.android.com/guide/components/loaders.html





android-loadermanager