Android 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

Android MediaScanner_第1张图片

MediaScanner针对每一种请求的处理

Android MediaScanner_第2张图片

MediaScannerService#onStartCommand()中完成的工作

Android MediaScanner_第3张图片

MediaScanner.scanSingleFile()

Android MediaScanner_第4张图片

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

Android MediaScanner_第5张图片

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

Android MediaScanner_第6张图片

备注:
源码分析基于Android 4.4
1、内部扫描其实是扫描的/system/media路径
2、外部扫面位置是/mnt/sdcard路径
3、MediaScanner::doProcessDirectory扫描路径时会忽略含有.nomedia文件的文件夹,忽视...,

你可能感兴趣的:(Android,基础业务分析)