MediaScanner类的调用流程说明 mediascanner扫描所有

在MediaScanner.java文件的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类的调用流程说明 mediascanner扫描所有

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

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/129347.html

更多阅读

智能马桶的基本功能说明 智能马桶的功能

智能马桶的基本功能说明——简介随着科技的发展,卫浴功能的不断开发,智能马桶开始出现,人性化的外形和功能设计使得智能马桶才高八斗。智能马桶的出现体现了人们对舒适生活和对健康生活的追求,智能马桶在日本的普及率更超过60%。下面为

梦幻诛仙活动任务赏金猎人的简单流程 梦幻诛仙赏金任务

赏金猎人,该活动真的很简单,经验还可以吧就是消耗时间。梦幻诛仙活动任务赏金猎人的简单流程——步骤/方法梦幻诛仙活动任务赏金猎人的简单流程 1、活动领取的NPC:念裳 坐标在进入混沌时空附近梦幻诛仙活动任务赏金猎人的简单流程 2

出口贸易的基本流程 一达通出口退税流程图

出口贸易的一般步骤是:(1)交易前的准备阶段;(2)交易磋商、订立合同阶段;(3)组织货源阶段;(4)履行合同、处理争议阶段;(5)核算效益、总结得失阶段。出口贸易的基本流程——一、交易前的准备阶段交易前的准备阶段。这一阶段内要完成的

首次港澳通行证的办理流程 港澳通行证办理材料

首次港澳通行证的办理流程——简介现在,交通便利了,经济条件好了,港澳与内地的交流也越来越紧密了,我们去香港澳门也是方便极了。但是我们内地游客去香港澳门必须要有港澳通行证,所以我来向大家介绍一下办理流程:首次港澳通行证的办理流

声明:《MediaScanner类的调用流程说明 mediascanner扫描所有》为网友浮生以过三千路分享!如侵犯到您的合法权益请联系我们删除