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的游标