2012-05-19
本文是笔者的分析归纳,并用UML图(ClassDiagram/Sequence Diagram)来呈现。虽然来源于对Android源码的分析,但文中不会占用大量篇幅罗列源码,所以读者在阅读本文时,手头最好有Android源码,结合源码来解读。本文对MediaScannerService的类结构进行静态分析,对创建时和启动时的工作进行动态分析,分析过程中来看MediaScannerService如何处理MediaScannerReceiver所接收到的各种扫描请求。
在Runnable.run()中执行消息循环,把通过Handler发送过来的消息在工作线程中执行。
在MediaScannerService被通过startService启动的过程中,其实包含了创建时的工作。下面分别分析创建时和启动时所完成的工作。
Service对象在被创建的时候,onCreate()会被调用,看一下MediaScannerService的onCreate()里面做了什么:
MediaScannerService创建就是为了扫描Media的,这一过程是非常费时费力的。所以:
Service对象在被启动的时候,onStartCommand()会被调用,看一下MediaScannerService的onStartCommand()里面做了什么。
下图是MediaScannerService#onStartCommand()中完成的工作:
可以结合MediaScannerReceiver中启动方式的不同来看传入的参数:
本文对MediaScannerService的类结构进行了静态分析,对创建时和启动时的工作进行了动态分析,分析过程中看MediaScannerService如何响应MediaScannerReceiver所接收到的各种扫描请求。
与其他文章的关系: