Pouvez-vous utiliser un LoaderManager à partir d’un service?

J’ai un système de chargement de données configuré à l’aide d’un chargeur et d’un curseur personnalisés qui fonctionnent parfaitement avec Activités et Fragments, mais il n’y a pas de LoaderManager (que je peux trouver) dans Service. Est-ce que quelqu’un sait pourquoi LoaderManager a été exclu du service? Si ce n’est pas le cas?

Est-ce que quelqu’un sait pourquoi LoaderManager a été exclu du service?

Comme indiqué dans l’autre réponse, LoaderManager été explicitement conçu pour gérer les Loaders tout au long des Acivities de vie des Acivities et des Fragments . Étant donné que les Services ne disposent pas de ces modifications de configuration, l’utilisation d’un LoaderManager n’est pas nécessaire.

Si ce n’est pas le cas?

Oui, l’astuce est que vous n’avez pas besoin d’utiliser un LoaderManager , vous pouvez simplement travailler directement avec votre Loader , qui gérera de manière asynchrone vos données et surveillera toutes les modifications de données sous-jacentes.

Tout d’abord, créez, enregistrez et commencez à charger votre Loader lorsque votre Service est créé.

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

Ensuite, implémentez OnLoadCompleteListener dans votre Service pour gérer les rappels de charge.

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

Enfin, n’oubliez pas de nettoyer votre Loader lorsque le Service est détruit.

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

Malheureusement non. Les chargeurs ont été conçus pour des activités et des fragments afin de gérer correctement les modifications de configuration qui se produisent dans les activités et les fragments. Rotation de votre appareil et ré-attachement aux données existantes.

Un service n’a aucune modification de configuration, il restra en arrière-plan jusqu’à ce qu’il soit terminé ou que le système soit forcé de le tuer. Donc, en supposant que vous exécutez votre code sur un thread d’arrière-plan dans votre service (ce que vous devriez être de toute façon), il n’y a juste aucune raison d’utiliser un chargeur. Faites simplement les appels dont vous avez besoin pour interroger vos données.

Donc, si votre service est juste un IntentService, vous pouvez écrire votre logique pour interroger vos données sauvegardées par le curseur dans la méthode onHandleIntent ().

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