先把结论放在前面:ContentProvider 是四大组件里唯一"不是给界面用的",它本质是跨进程的表结构接口 + 数据通知机制。两件事必须立住:① 它的调用不经过Binder代理的常规路径——每次query都是一次完整的事务,因此计数严格;② 它的实例在应用进程启动时就被创建**,早于Application.onCreate,这既是它的价值,也是它的坑。ContentProvider 一次讲透:它是什么、怎么工作、项目里怎么用、坑在哪。执行路径:从客户端到 provider 的一次完整事务val cursor = contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // 或自建 authority arrayOf(MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.SIZE), "${MediaStore.Images.Media.SIZE} ?", // selection arrayOf("1024"), // selectionArgs "${MediaStore.Images.Media.DATE_ADDED} DESC" // s