Android MediaScanner:(一)MediaScanner总体架构

Android MediaScanner:(一)MediaScanner总体架构

分类: Android android.multimedia2012-05-19 18:29 5050人阅读 评论(5) 收藏 举报

androidservice数据库工作interfaceinsert

田海立@csdn

2012-05-19

本文是笔者的分析归纳,并用UML图(Class Diagram/Sequence Diagram)来呈现。虽然来源于对Android源码的分析,但文中不会占用大量篇幅罗列源码,所以读者在阅读本文时,手头最好有Android源码,结合源码来解读。本文讲述MediaScanner的架构。

MediaScanner是Android系统Media的基础,系统启动之初,就扫描出Media文件供后续使用,有新媒体加入或者删除掉媒体文件,也需要更新相应的媒体库。Android的Music、Gallery等播放或呈现媒体文件的程序也都基于稳定的MediaScanner扫描媒体文件的结果,否则,会发现程序操作的Media文件的URI根本不是实际对应的Media文件,或者甚至来电铃声和闹铃等都会有问题。

MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider。

下图是packages/providers/MediaProvider下的AndroidManifest的内容:

  • MediaScannerReceiver是一个BroadcastReceiver,接收广播,进行媒体扫描,这也是MediaScanner提供给外界的接口之一。收到广播之后启动MediaScannerService具体执行扫描工作。
  • MediaScannerService是一个Service,负责媒体扫描,它还要用到Framework中的MediaScanner来共同完成具体扫描工作,扫描的结果在MediaProvider提供的数据库中。
  • MediaProvider是一个ContentProvider,媒体库(Images/Audio/Video/Playlist等)的数据提供者。负责操作数据库,并提供给别的程序insert、query、delete、update等操作。

另外,IMediaScannerService和IMediaScannerListenter这两个Interface提供给其他程序通过AIDLIPC调用扫描单个文件的能力。定义在framework中,Service中实现接口。

下面针对MediaScanner中的各个部分,分别讲解:

Android MediaScanner:(一)MediaScanner总体架构

讲述MediaScanner的架构。

Android MediaScanner:(二)MediaScannerReceiver

讲述MediaScannerReceiver针对来自Broadcast的不同请求所做的处理。

Android MediaScanner:(三)MediaScannerService

对MediaScannerService的类结构进行静态分析,对创建时和启动时的工作进行动态分析,分析过程中来看MediaScannerService如何处理MediaScannerReceiver所接收到的各种扫描请求。

Android MediaScanner:(四)MediaScanner之scanSingleFile

本文从MediaScannerService的scanFile入口开始,详细分析MediaScanner和MediaScannerClient对单个媒体文件的扫描处理过程。

Android MediaScanner:(五)MediaScanner之scanDirectories

Android MediaScanner:(六)MediaScanner之Native实现

Android MediaScanner:(七)MediaScanner完整过程总结

Android MediaScanner:(八)IMediaScannerService接口实现

时间: 2024-08-01 22:35:32

Android MediaScanner:(一)MediaScanner总体架构的相关文章

一个实用的android框架(一)——架构

原文出处:http://saulmm.github.io/2015/02/02/A%20useful%20stack%20on%20android%20%231,%20architecture/ 原码github地址:https://github.com/saulmm/Material-Movies 作者:Saúl Molinero 译者注:这是最近接触到的一个关于安卓架构的项目,也是基于MVP的,分包上的想法和我比较契合.另外,该项目也是使用了Material Design,感觉比较新颖实用.

Android系统的安全设计与架构

Android系统的安全设计与架构 一.安全策略 1.Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层. Android框架层.Dalvik虚拟机层.用户空间原生代码层和Linux内核层. 2.安全边界,有时也会称为信任边界,是系统中分隔不同信任级别的特殊区域. 一个最直接的例子就是内核空间与用户空间之间的边界.内核空间中的 代码可以对硬件执行一些底层操作并访问所有的虚拟和物理内存,而用 户空间中的代码则由于CPU的安全边界控制,无法访问所有内存. 3.And

深入解析Windows操作系统之总体架构

(一)需求和设计目标 Windows NT设计小组在项目开始之初选择了下面的设计目标: (1)扩展性:编写的系统代码必须能够随着市场需求的变化而自如增长和改变. (2)可移植性:系统必须能运行在多种硬件体系架构上,必须能根据市场的需要,相对容易地迁移到新的体系架构上. (3)可靠性和健壮性:系统应该能够保护自己,不会因内部的故障和外部的篡改而不能工作.应用程序应该无法伤害操作系统或其他应用程序. (4)兼容性:虽然Windows NT应该扩展已有的技术,但是它的用户界面和API应该与老版本的Wi

Android—Camera Framework C/S架构服务请求

在前一篇文章Camera Client/Server的binder IPC机制中阐述了Android进程间通信binder IPC机制基础,Android Camera基于这个基础设计了Camera Framework Client/Server架构,文中给出了其类图设计.本文从Android 4.4 版本源码入手,分析Camera App向Camera Service请求服务与返回的过程.服务请求的过程从上到下依次要经过三个大的过程:1. Camera App调用Framework Camer

python源码学习(一)——python的总体架构

python源码学习(一)——python的总体架构 学习环境: 系统:ubuntu 12.04 STLpython版本:2.7既然要学习python的源码,首先我们要在电脑上安装python并且下载python的源码,ubuntu 12.04 STL自带的python版本为2.7.3,这就可以了,接下来下载源码,下载python2.7.7的源代码,下载结束后解压文件,我们会看到如下文件结构:,接下来介绍一下,demo文件夹里放的是一些例子:Doc文件夹里放的是文档,Grammer是语法分析器,

Openvswitch原理与代码分析(1):总体架构

一.Opevswitch总体架构 Openvswitch的架构网上有如下的图表示: 每个模块都有不同的功能 ovs-vswitchd 为主要模块,实现交换机的守护进程daemon 在Openvswitch所在的服务器进行ps aux可以看到以下的进程 root 1008 0.1 0.8 242948 31712 ? S<Ll Aug06 32:17 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err

jquery 总体架构

版本:1.7.1 总体架构: 1.执行jQuery(selector, context)方法,在方法内部实例化函数jQuery.fn.init,得到一个jquery对象. 2.函数jQuery.fn.init属于jQuery原型上的方法. 3.函数jQuery.fn.init的原型指向函数jQuery的原型. 4.因此,生成的jquery对象继承了函数jQuery原型上的属性和方法. 5.函数jQuery有自己的静态方法,直接使用 jQuery.方法名 来调用. 6.此外,可通过jQuery.e

Jquery总体架构

第一章  总体架构 1.设计理念 Jquery的理念就是“写更少的代码,做更多的事”,而且做到代码的高度兼容性. 2.总体架构 大致可以分为三个部分:构造模块,底层支持模块和功能模块. 3.使用自调用匿名函数 这里先分析一下匿名函数: 匿名函数的作用是创建一块封闭区域,外面不能够访问里面的变量和方法,有两种比较常见的写法: 写法一:(function(){ ... }()) 写法二:(function(){ ... })() 除了这两种写法之外还有很多写法,可以参考js自调用匿名函的N种写法 J

jQuery源码分析-01总体架构

1. 总体架构 1.1自调用匿名函数 self-invoking anonymous function 打开jQuery源码,首先你会看到这样的代码结构: (function( window, undefined ) { // jquery code })(window); 1.这是一个自调用匿名函数.在第一个括号内,创建一个匿名函数:第二个括号,立即执行 2.为什么要创建这样一个“自调用匿名函数”呢? 通过定义一个匿名函数,创建了一个“私有”的命名空间,该命名空间的变量和方法,不会破坏全局的命