Ziemlich einfach. Was ist der Unterschied zwischen diesen dreien?
Ich möchte jedes Bild in einem Gerät auflisten. Sollte ich es benutzen managedQuery()
, android.provider.MediaStore.Images.Media.query()
oder context.getContentResolver.query()
Macarse
Ziemlich einfach. Was ist der Unterschied zwischen diesen dreien?
Ich möchte jedes Bild in einem Gerät auflisten. Sollte ich es benutzen managedQuery()
, android.provider.MediaStore.Images.Media.query()
oder context.getContentResolver.query()
Pentium10
managedQuery()
verwendet die Abfrage() von ContentResolver. Der Unterschied besteht darin, dass mit managedQuery()
Die Aktivität behält einen Verweis auf Ihren Cursor und schließt ihn bei Bedarf (in onDestroy()
zum Beispiel.) Wenn ja query()
du selbst, du Wille müssen den Cursor als sensible Ressource verwalten. Wenn Sie es beispielsweise vergessen close()
es hinein
onDestroy()
werden Sie zugrunde liegende Ressourcen verlieren (Logcat wird Sie davor warnen).
Um einen Inhaltsanbieter abzufragen, können Sie entweder die ContentResolver.query()
Methode oder die Activity.managedQuery()
Methode. Beide Methoden verwenden dieselben Argumente und geben ein Cursor-Objekt zurück. Jedoch, managedQuery()
bewirkt, dass die Aktivität den Lebenszyklus des Cursors verwaltet. Ein verwalteter Cursor erledigt alle Feinheiten, wie z. B. das Entladen selbst, wenn die Aktivität angehalten wird, und das erneute Abfragen, wenn die Aktivität neu gestartet wird. Sie können eine Aktivität bitten, mit der Verwaltung eines nicht verwalteten Cursor-Objekts für Sie zu beginnen, indem Sie aufrufen Activity.startManagingCursor()
.
Aktualisieren:
managedQuery
ist jetzt veraltet (ab Android 3.0).
@ Pentium10: Großartig! Und Unterschied zwischen der Verwendung von android.provider.MediaStore.Images.Media.query() und context.getContentResolver.query()?
– Makarse
7. April 2010 um 20:25 Uhr
Tut mir leid, das weiß ich nicht. Vielleicht gibt es das nicht.
– Pentium10
7. April 2010 um 21:05 Uhr
Kam wegen der Frage von @Macarse 🙁
– MBillau
23. Januar 2014 um 20:24 Uhr
@Macarse Es gibt keinen Unterschied, da der erste Parameter zu android.provider.MediaStore.Images.Media.query() ein ContentResolver ist. Die Methode ist nur ein Alias für context.getContentResolver.query().
– Onkel Code Monkey
18. März 2014 um 9:21 Uhr
Benutzer979247
managedQuery(..) ist jetzt veraltet (ab Android 3.0). Achtung..
Android-Fehler: java.lang.IllegalStateException: Versuch, einen bereits geschlossenen Cursor erneut abzufragen