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

Mac*_*rse 46 android

很简单.这三者有什么区别?

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

Pen*_*m10 72

managedQuery()将使用ContentResolver的查询().不同之处在于,managedQuery()活动将保留对Cursor的引用并在需要时关闭它(onDestroy()例如.)如果您query()自己动手,必须将Cursor作为敏感资源进行管理.如果你忘了,例如,要close()在它 onDestroy(),你会泄漏底层资源(logcat中会提醒你一下吧.)

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

更新:

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


小智 23

managedQuery(..)现已弃用(从Android 3.0开始).小心..

Android错误:java.lang.IllegalStateException:尝试重新查询已经关闭的游标