managedQuery()与context.getContentResolver.query()与android.provider.something.query()的区别

47
很简单。这三者有何不同?
我想列出设备中的每个图像。我应该使用 managedQuery(), android.provider.MediaStore.Images.Media.query() 还是 context.getContentResolver.query()
2个回答

72

managedQuery() 方法使用 ContentResolver 的 query() 方法进行查询。不同的是,managedQuery() 会使活动保持对您的 Cursor 的引用,并在需要时(例如在 onDestroy() 中)关闭它。如果您自己执行 query(),则必须将 Cursor 作为敏感资源进行管理。如果您忘记在 onDestroy() 中进行 close() 操作,则会泄漏底层资源(logcat 将警告您)。

要查询内容提供程序,可以使用 ContentResolver.query() 方法或 Activity.managedQuery() 方法。这两个方法接受相同的一组参数,并且都返回 Cursor 对象。但是,managedQuery() 使活动来管理 Cursor 的生命周期。托管 Cursor 处理所有细节,例如在活动暂停时卸载自身,在活动重新启动时重新查询自身。您可以调用 Activity.startManagingCursor() 要求 Activity 开始为您管理未经管理的 Cursor 对象。

更新:

managedQuery 现已过时(自 Android 3.0 起)。


1
@Pentium10:太好了!使用android.provider.MediaStore.Images.Media.query()和context.getContentResolver.query()有什么区别? - Macarse
抱歉,我不知道那个。也许没有。 - Pentium10
来回答 @Macarse 的问题 :( - MBillau
@Macarse,android.provider.MediaStore.Images.Media.query()的第一个参数是ContentResolver,因此没有区别。该方法只是context.getContentResolver.query()的别名。 - Uncle Code Monkey

23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接