|
(一)MediaScanner總體架構 本文是筆者的分析歸納,并用UML圖(Class Diagram/Sequence Diagram)來呈現。雖然來源于對Android源碼的分析,但文中不會占用大量篇幅羅列源碼,所以讀者在閱讀本文時,手頭最好有Android源碼,結合源碼來解讀。本文講述MediaScanner的架構。
MediaScanner是Android系統(tǒng)Media的基礎,系統(tǒng)啟動之初,就掃描出Media文件供后續(xù)使用,有新媒體加入或者刪除掉媒體文件,也需要更新相應的媒體庫。Android的Music、Gallery等播放或呈現媒體文件的程序也都基于穩(wěn)定的MediaScanner掃描媒體文件的結果,否則,會發(fā)現程序操作的Media文件的URI根本不是實際對應的Media文件,或者甚至來電鈴聲和鬧鈴等都會有問題。 MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider 下圖是packages/providers/MediaProvider下的AndroidManifest的內容:
另外,IMediaScannerService和IMediaScannerListenter這兩個Interface提供給其他程序通過AIDLIPC調用掃描單個文件的能力。定義在framework中,Service中實現接口。
下面針對MediaScanner中的各個部分,分別講解: Android MediaScanner:(一)MediaScanner總體架構 講述MediaScanner的架構。 Android MediaScanner:(二)MediaScannerReceiver 講述MediaScannerReceiver針對來自Broadcast的不同請求所做的處理。
本文是筆者的分析歸納,并用UML圖(ClassDiagram/Sequence Diagram)來呈現。雖然來源于對Android源碼的分析,但文中不會占用大量篇幅羅列源碼,所以讀者在閱讀本文時,手頭最好有Android源碼,結合源碼來解讀。本文講述MediaScanner的入口MediaScannerReciever針對不同Broadcast的請求所做的處理。
在上文中的圖中可以講到,MediaScannerReceiver處理三種Broardcast請求:
下圖MediaScanner針對每一種請求的處理:
【小結】本文講述MediaScanner的入口MediaScannerReciever針對不同Broadcast的請求(BOOT_COMPLETED/MEDIA_MOUNTED/ MEDIA_SCANNER_SCAN_FILE)所做的處理。 掃描如何實現的,接下來看MediaScannerService中的實現。 |
|
|