managedQuery() vs context.getContentResolver.query() vs android.provider.something.query()
Solution 1:
managedQuery()
will use ContentResolver's query(). The difference is
that with managedQuery()
the activity will keep a reference to your
Cursor and close it whenever needed (in onDestroy()
for instance.) If
you do query()
yourself, you will have to manage the Cursor as a
sensitive resource. If you forget, for instance, to close()
it in
onDestroy()
, you will leak underlying resources (logcat will warn you
about it.)
To query a content provider, you can use either the ContentResolver.query()
method or the Activity.managedQuery()
method. Both methods take the same set of arguments, and both return a Cursor object. However, managedQuery()
causes the activity to manage the life cycle of the Cursor. A managed Cursor handles all of the niceties, such as unloading itself when the activity pauses, and requerying itself when the activity restarts. You can ask an Activity to begin managing an unmanaged Cursor object for you by calling Activity.startManagingCursor()
.
Update:
managedQuery
is now deprecated (as of Android 3.0).
Solution 2:
managedQuery(..) is now deprecated (as of Android 3.0). Watch out..
Android error: java.lang.IllegalStateException: trying to requery an already closed cursor