Comment passer de managedQuery à LoaderManager / CursorLoader?
Je voudrais développer une application Android qui est le ciblage de l'API de niveau 8 (2.2, Froyo). Je suis à l'aide d'un ContentProvider
et c'est assez simple, et je suis en utilisant SimpleCursorAdapter
pour remplir ma liste, mais j'ai remarqué que dans la documentation du SimpleCursorAdapter que le sans pavillon constructeur est obsolète avec la note suivante:
Ce constructeur est obsolète.
Cette option est déconseillée, car les résultats Curseur de requêtes effectuées sur le thread de l'INTERFACE utilisateur et peut donc provoquer un manque de réactivité ou encore l'Application ne Répond Pas des erreurs. Comme une alternative, utiliser LoaderManager avec un CursorLoader.
Depuis que je suis ciblage de l'API de niveau 8, un LoaderManager
n'est pas liée à un Activity
. Le FragmentActivity
classe dans le package de compatibilité fait cela, mais je ne suis pas à l'aide de Fragments.
Ma question est: quel est exactement dois-je utiliser LoaderManager/CursorLoader
dans une application ciblant un pré-11 API de niveau? Suis-je obligé de faire la transition à des Fragments ou devrais-je revenir à l'obsolète SimpleCursorAdapter
constructeur (mais d'une AsyncTask
garder thread d'INTERFACE utilisateur conviviale, c'est ce que le CursorLoader
est censé le faire)?
source d'informationauteur mkuech
Vous devez vous connecter pour publier un commentaire.
Edit:
J'ai écrit assez longuement sur la
LoaderManager
dans ce blog. Check it out et laissez-moi savoir si son utile! 🙂Original post:
Certainement, certainement, certainement aller avec
LoaderManager
. LeCursorLoader
classe décharge le travail de chargement de données sur un fil, et conserve les données persistante des cours à court terme de l'activité de l'actualisation des événements, comme un changement d'orientation. En plus de l'exécution de la requête initiale, leCursorLoader
enregistre unContentObserver
avec le jeu de données que vous avez demandé et appelsforceLoad()
sur lui-même lorsque l'ensemble de données change, et est donc la mise à jour automatique. C'est extrêmement pratique, car vous n'avez pas à vous soucier de l'exécution des requêtes vous-même. Bien sûr, il est possible de faire usage deAsyncTask
pour garder votre application thread d'INTERFACE utilisateur conviviale, mais il implique beaucoup plus de code... et la mise en œuvre de votre classe de sorte qu'il sera, par exemple, de conserver le chargéCursor
surActivity
ne sera pas simple. La ligne de fond est queLoaderManager/Loader
le fera automatiquement pour vous, en tant que bien que prendre soin de correctement création et fermeture de laCursor
basé sur laActivity
cycle de vie.À utiliser
LoaderManager/CursorLoader
dans une application ciblant un pré-11 niveau API, il suffit d'utiliser laFragmentActivity
classe dans le package de compatibilité. UnFragmentActivity
est juste unActivity
et a été créé pour Android prise en charge de compatibilité, et ne nécessite pas l'utilisation deFragment
s dans votre application. Utilisez simplementgetSupportLoaderManager()
au lieu degetLoaderManager()
et vous devriez être tous ensemble. Vous pouvez, bien sûr, de mettre en œuvre un parentFragmentActivity
pour chaque écran et d'en faire affiche un sa mise en page dans unFragment
(en faisant usage deFragmentActivity.getSupportFragmentManager()
dans l'Activité deonCreate()
méthode). Cette conception pourrait faire la transition vers le multi-panneau mises en page plus facile si vous décidez jamais pour optimiser votre application pour les tablettes. C'est une belle expérience d'apprentissage trop :).C'est un assez beau tutoriel trop. Essayez et de travailler votre chemin à travers elle et n'hésitez pas à laisser un commentaire si vous avez d'autres questions.