MediaScanner类的调用流程说明 mediascanner扫描所有
1.原文
Internal service helper that no-one should use directly.
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() (currently part of opencore) 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.
In summary:
Java MediaScannerService calls
Java MediaScanner scanDirectories, which calls
Java MediaScanner processDirectory (native method), which calls
native MediaScanner processDirectory, which calls
native MyMediaScannerClient scanFile, which calls
Java MyMediaScannerClient scanFile, which calls
Java MediaScannerClient doScanFile, which calls
Java MediaScanner processFile (native method), which calls
native MediaScanner processFile, which calls
native parseMP3, parseMP4, parseMidi, parseOgg or parseWMA, which calls
native MyMediaScanner handleStringTag, which calls
Java MyMediaScanner handleStringTag.
Once MediaScanner processFile returns, an entry is inserted in to the database.
2.译文
不能直接使用内部服务助手。
目前扫描的工作方法是:
- Java类MediaScannerService创建了MediaScanner对象,并且调用此对象的MediaScanner.scanDirectories方法。
- scanDirectories()方法为每一个指定的目录调用native方法processDirectory()。
- processDirectory() JNI方法通过native类MyMediaScannerClient,提供了一个mediascanner 客户端,
然后通过此nativeMediaScanner对象调用processDirectory()方法(当创建Java对象MediaScanner时创建的)。
- native方法MediaScanner.processDirectory() (目前是opencore的一部分)调用doProcessDirectory()方法递归处理文件夹,
并且为每一个扩展名匹配的文件调用native方法MyMediaScannerClient.scanFile()。
- Java方法MediaScannerClient.scanFile回调native方法MyMediaScannerClient.scanFile()(MyMediaScannerClient类实现了MediaScannerClient接口),
MyMediaScannerClient.scanFile()方法又调用了doScanFile方法,doScanFile方法做了一些设置后又调用native方法MediaScanner.processFile()。
- MediaScanner.processFile()依据文件类型调用以下方法中的一个:parseMP3, parseMP4, parseMidi, parseOgg或者parseWMA。
-这些方法从文件中取得metadata键/值对,并且循环调用native方法MyMediaScannerClient.handleStringTag,由文件中的java counterparts决定回调。
- Java方法handleStringTag()收集感兴趣的键/值对。
- 在doScanFile()方法中,一旦processFile方法返回Java代码,它调用Java方法MyMediaScannerClient.endFile(),并且把所有收集到的数据插入到数据库实体中。
总结:
Java类MediaScannerService调用
Java类MediaScanner的scanDirectories方法,它又调用了
Java类MediaScanner的processDirectory 方法(native方法),它又调用了
native类MediaScanner的processDirectory方法,它又调用了
native类MyMediaScannerClient的scanFile方法,它又调用了 (此处不 容易理解,从native调用java层的方法)
Java类MyMediaScannerClient的scanFile方法,它又调用了
Java接口MediaScannerClient的doScanFile方法(实际是调用的java类MyMediaScannerClient的doScanFile方法,java接口MediaScannerClient未定义doScanFile方法),它又调用了
Java类MediaScanner的processFile方法(native方法),它又调用了
native类MediaScanner的processFile方法,它又调用了
native方法parseMP3, parseMP4, parseMidi, parseOgg或者parseWMA,它又调用了
native类MyMediaScanner的handleStringTag方法,它又调用了
Java类MyMediaScanner的handleStringTag方法。
一旦从MediaScanner的processFile方法返回,将检索到的一条媒体条目信息插入到数据库中。
Java类MyMediaScannerClient的定义在MediaScanner.java文件中,实现了MediaScannerClient接口。
Native类MyMediaScannerClient的定义在android_media_MediaScanner.cpp文件中,继承了MediaScannerClient类。
调用时序图如下:引自http://www.cnblogs.com/halzhang/archive/2011/03/10/1980319.html
更多阅读
智能马桶的基本功能说明 智能马桶的功能
智能马桶的基本功能说明——简介随着科技的发展,卫浴功能的不断开发,智能马桶开始出现,人性化的外形和功能设计使得智能马桶才高八斗。智能马桶的出现体现了人们对舒适生活和对健康生活的追求,智能马桶在日本的普及率更超过60%。下面为
建业城探案的主要流程,建邺城探案任务攻略 建业探案任务攻略
邺城探案的主要流程: 建邺赵捕头开始任务-建业县令-简师爷-衙役(简师爷下面那个)-简师爷(选择衙役丁)-赵铺头(得到木牌后再点一下赵铺头)-管家-李善人(经过一段动画)-符全-戏班老板-吹牛王-马全有-教书先生-雷黑子-小花-布店老板
梦幻诛仙活动任务赏金猎人的简单流程 梦幻诛仙赏金任务
赏金猎人,该活动真的很简单,经验还可以吧就是消耗时间。梦幻诛仙活动任务赏金猎人的简单流程——步骤/方法梦幻诛仙活动任务赏金猎人的简单流程 1、活动领取的NPC:念裳 坐标在进入混沌时空附近梦幻诛仙活动任务赏金猎人的简单流程 2
出口贸易的基本流程 一达通出口退税流程图
出口贸易的一般步骤是:(1)交易前的准备阶段;(2)交易磋商、订立合同阶段;(3)组织货源阶段;(4)履行合同、处理争议阶段;(5)核算效益、总结得失阶段。出口贸易的基本流程——一、交易前的准备阶段交易前的准备阶段。这一阶段内要完成的
首次港澳通行证的办理流程 港澳通行证办理材料
首次港澳通行证的办理流程——简介现在,交通便利了,经济条件好了,港澳与内地的交流也越来越紧密了,我们去香港澳门也是方便极了。但是我们内地游客去香港澳门必须要有港澳通行证,所以我来向大家介绍一下办理流程:首次港澳通行证的办理流