非常简单。 这三者有什么区别?
我想列出设备中的每张图片。
我应该使用managedQuery()
,android.provider.MediaStore.Images.Media.query()
还是context.getContentResolver.query()
答案 0 :(得分:72)
managedQuery()
将使用ContentResolver的query()。不同的是
对于managedQuery()
,该活动将保留对您的参考
光标并在需要时关闭它(例如在onDestroy()
中。)如果
你自己做query()
,你将必须管理光标作为
敏感资源。例如,如果您忘记了close()
它
onDestroy()
,您将泄漏底层资源(logcat会警告您
关于它。)
要查询内容提供商,您可以使用ContentResolver.query()
方法或Activity.managedQuery()
方法。两种方法都使用相同的参数集,并且都返回Cursor对象。但是,managedQuery()
会导致活动管理Cursor的生命周期。托管Cursor处理所有细节,例如在活动暂停时卸载自身,并在活动重新启动时重新查找自身。您可以通过调用Activity.startManagingCursor()
来请求Activity开始为您管理非托管Cursor对象。
<强>更新强>
managedQuery
现已弃用(自Android 3.0起)。
答案 1 :(得分:23)
managedQuery(..)现已弃用(自Android 3.0起)。小心..
Android error: java.lang.IllegalStateException: trying to requery an already closed cursor