ContentProvider 與數據共享:URI、權限與性能
ContentProvider 提供跨進程的數據訪問能力,通過標準 CRUD 接口與 Uri 路由。核心點:
Uri結構:content://authority/path/id,配合UriMatcher實現路由到具體表或記錄。- 權限控制:聲明讀寫權限或自定義權限,細粒度授權可使用
Uri臨時授權(FLAG_GRANT_READ_URI_PERMISSION)。 - 事務與批量操作:使用
applyBatch批量執行,降低多次Binder往返成本。 - 文件共享:使用
FileProvider暴露私有文件,避免直接通過file://,並授予臨時讀寫。
性能:
- 將複雜查詢下沉到數據庫層(如
Room的@Query),避免在Provider層做大量對象組裝。 - 對高頻訪問加索引,謹慎使用
Cursor,及時關閉。 - 避免在主線程進行查詢;若 UI 需要數據,建議搭配
ViewModel+LiveData/Flow異步加載。