非常簡單。 這三者有什麼區別?managedQuery()vs context.getContentResolver.query()vs android.provider.something.query()
我想列出設備中的每個圖像。 我應該使用,android.provider.MediaStore.Images.Media.query()
或context.getContentResolver.query()
非常簡單。 這三者有什麼區別?managedQuery()vs context.getContentResolver.query()vs android.provider.something.query()
我想列出設備中的每個圖像。 我應該使用,android.provider.MediaStore.Images.Media.query()
或context.getContentResolver.query()
將使用ContentResolver的的查詢()。所不同的是 與活動將保持對它的引用您的 光標並關閉它需要的時候(在onDestroy()
例如)。如果 你自己做query()
,你將必須管理光標作爲 敏感的資源。如果你忘了,例如,以close()
它 onDestroy()
,你會泄漏底層資源(logcat中會警告你 一下吧。)
要查詢的內容提供者,您可以使用該ContentResolver.query()
方法或Activity.managedQuery()
方法。兩種方法都採用同一組參數,並且都返回一個Cursor對象。但是,會導致該活動管理光標的生命週期。託管Cursor處理所有細節,例如活動暫停時自行卸載,並在活動重新啓動時重新進行自我檢查。您可以通過致電Activity.startManagingCursor()
來要求活動開始管理非託管光標對象。
更新:
managedQuery
現在已被棄用(由於Android 3.0)。
managedQuery(..)現已被棄用(截至Android 3.0)。小心..
Android error: java.lang.IllegalStateException: trying to requery an already closed cursor
@ Pentium10:好極了!和使用android.provider.MediaStore.Images.Media.query()和context.getContentResolver.query()之間的區別? – Macarse 2010-04-07 20:25:38
對不起,我不知道。也許沒有。 – Pentium10 2010-04-07 21:05:28
來到@ Macarse的問題:( – MBillau 2014-01-23 20:24:31