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 異步加載。