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

时间:2010-04-07 19:15:43

标签: android

非常简单。 这三者有什么区别?

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

2 个答案:

答案 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