managedQuery()vs context.getContentResolver.query()vs android.provider.something.query()

很简单。 这三者之间有什么不同?

我想列出设备中的每个图像。 我应该使用managedQuery()android.provider.MediaStore.Images.Media.query()context.getContentResolver.query()

managedQuery()将使用ContentResolver的query()。 不同之处在于,对于managedQuery() ,活动会保留对游标的引用,并在需要时closures它(例如在onDestroy() 。如果自己执行query()必须将游标作为敏感资源。 如果你忘记,例如, close()onDestroy() ,你会泄漏底层资源(logcat会警告你。)

要查询内容提供者,可以使用ContentResolver.query()方法或Activity.managedQuery()方法。 两种方法都采用相同的参数集,并且都返回一个Cursor对象。 但是, managedQuery()会导致活动pipe理Cursor的生命周期。 一个托pipe的Cursor处理所有的细节,比如活动暂停时自己卸载,当活动重新启动时重新自我查询。 您可以通过调用Activity.startManagingCursor()来要求一个Activity开始pipe理一个非托pipeCursor对象。

更新:

managedQuery现已被弃用(从Android 3.0开始)。

managedQuery(..)现已弃用(截至Android 3.0)。 小心..

Android错误:java.lang.IllegalStateException:试图重新查找一个已经closures的游标