Android MediaScanner 扫描流程
来源:互联网 发布:用vb制作倒计时 编辑:程序博客网 时间:2024/05/16 11:33
android MediaScanner 扫描调用的时序图:
android MediaScanner 代码具体分析:
引言:
* The way the scan currently works is: * - The Java MediaScannerService creates a MediaScanner (this class), and calls * MediaScanner.scanDirectories on it. * - scanDirectories() calls the native processDirectory() for each of the specified directories. * - the processDirectory() JNI method wraps the provided mediascanner client in a native * 'MyMediaScannerClient' class, then calls processDirectory() on the native MediaScanner * object (which got created when the Java MediaScanner was created). * - native MediaScanner.processDirectory() calls * doProcessDirectory(), which recurses over the folder, and calls * native MyMediaScannerClient.scanFile() for every file whose extension matches. * - native MyMediaScannerClient.scanFile() calls back on Java MediaScannerClient.scanFile, * which calls doScanFile, which after some setup calls back down to native code, calling * MediaScanner.processFile(). * - MediaScanner.processFile() calls one of several methods, depending on the type of the * file: parseMP3, parseMP4, parseMidi, parseOgg or parseWMA. * - each of these methods gets metadata key/value pairs from the file, and repeatedly * calls native MyMediaScannerClient.handleStringTag, which calls back up to its Java * counterparts in this file. * - Java handleStringTag() gathers the key/value pairs that it's interested in. * - once processFile returns and we're back in Java code in doScanFile(), it calls * Java MyMediaScannerClient.endFile(), which takes all the data that's been * gathered and inserts an entry in to the database.
从上面可以看出media scanner流程的设计逻辑,下面有几点需要注意:
1,接收mount 广播
mediaScannerReceiver 接收外部设备广播后,通过mediaScannerService每次扫描外部的都从SD卡目录扫描,然后递归到U盘,若加快扫描速度,可以考虑只扫描U盘目录或者固定目录。
2,预扫描 prescan
该函数的作用就是在扫描之前把数据库中的信息提取并保存(包括媒体文件的路径,Metadata,所属表的URI),这个主要是为了扫描后更好的更新数据库。
3,processDirectory媒体扫描
该函数是耗时最长的,主要分两种,如果是目录的话,就递归调用,如果是文件的话就
a,先调用beginFile,该函数用来保存到数据库之前的缓存中,还用来判断当前文件是否被修改过,若修改过,继续调用扫描。
b,再调用processFile,该函数通过调用mediaRetriver获取ID3信息
c,最好调用endfile 讲扫描到的信息插入到数据库中
阅读全文
0 0
- Android MediaScanner 扫描流程
- Android MediaScanner 多媒体扫描流程
- Android 媒体扫描MediaScanner
- android MediaScanner详解 ---- MediaScanner扫描得到多媒体信息
- android MediaScanner详解 ---- MediaScanner扫描得到多媒体信息
- android MediaScanner详解 ---- MediaScanner扫描得到多媒体信息
- android MediaScanner详解 ---- MediaScanner扫描得到多媒体信息
- Android之MediaScanner流程
- 修改android mediascanner扫描路径
- android mediascanner 扫描时机 记录
- Android调用MediaScanner开展扫描
- 修改android mediascanner扫描路径
- android framework MediaScanner等sd卡u盘扫描流程简要跟踪分析
- Android 之MediaScanner流程解析
- Android通知MediaScanner扫描指定的文件
- Android MediaProvider,MediaScanner媒体文件扫描源码解析
- Android媒体扫描详细解析之一(MediaScanner & MediaProvider)
- Android媒体扫描详细解析之二(MediaScanner & MediaProvider)
- pascal三角原理+zip用法-【leetcode119-pascal triangle2】
- mybatis级联之一对多的关系
- Android O要来了,大家准备好了吗?
- 解决$GLOBALS["HTTP_RAW_POST_DATA"]获取不到数据的问题
- 设计模式-单例模式
- Android MediaScanner 扫描流程
- hibernate笔记11 Hibernate查询方式
- 从 FingBugs的错误来看JAVA代码质量(一)
- 实验三 端口扫描实验
- 作用域
- Day 1
- echarts大数据量展示的解决方案
- 如何将list中的数据倒叙存放
- base64编码介绍 | Base64 Encode