ContentProvider 与 URI
ContentProvider 使用 URI 标识要操作的数据,这里的内容 URI 主要包括两部分:
authority:整个提供程序的符号名称
path:指向表的名称/路径
内容 URI 统一的形式就是:
content://authority/path
例如:
content://user_dictionary/words
当你调用 ContentResolver 方法来访问 ContentProvider 中的表时,需要传递要操作表的 URI。
在通过 ContentResolver 进行数据请求时(比如 contentResolver.insert(uri, contentValues);), 系统会检查指定 URI 的 authority 信息,然后将请求传递给注册监听这个 authority 的 ContentProvider 。这个 ContentProvider 可以监听 URI 想要操作的内容,Android 中为我们提供了 UriMatcher 来解析 URI。
stable与unstable的区别,采用unstable类型的ContentProvider的app不会因为远程ContentProvider进程的死亡而被杀,stable则恰恰相反。这便是ContentProvider坑爹之处,对于app无法事先决定创建的ContentProvider是stable,还是unstable 类型的,也便无法得知自己的进程是否会依赖于远程ContentProvider的生死
MediaScanner分析
MediaProvider
MediaScanner针对每一种请求的处理
MediaScannerService#onStartCommand()中完成的工作
MediaScanner.scanSingleFile()
MyMediaScannerClient是MediaScanner的内部类,实现了MediaScannerClient
MediaScanner所涉及的相关类和它们之间的关系
备注:
1、内部扫描其实是扫描的/system/media路径
2、外部扫面位置是/mnt/sdcard路径