Android 4.4 MediaScanner

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

MediaProvider

MediaScanner针对每一种请求的处理

MediaScanner针对每一种请求的处理

MediaScannerService#onStartCommand()中完成的工作

MediaScannerService#onStartCommand()中完成的工作

MediaScanner.scanSingleFile()

MediaScanner.scanSingleFile()

MyMediaScannerClient是MediaScanner的内部类,实现了MediaScannerClient

MyMediaScannerClient是MediaScanner的内部类,实现了MediaScannerClient

MediaScanner所涉及的相关类和它们之间的关系

MediaScanner所涉及的相关类和它们之间的关系

备注:
1、内部扫描其实是扫描的/system/media路径
2、外部扫面位置是/mnt/sdcard路径

猜你喜欢

转载自blog.csdn.net/q1183345443/article/details/80061158
4.4