乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      android MediaScanner

       浮云沫沫33 2013-09-06

      (一)MediaScanner總體架構(gòu)

      本文是筆者的分析歸納,并用UML圖(Class Diagram/Sequence Diagram)來呈現(xiàn)。雖然來源于對(duì)Android源碼的分析,但文中不會(huì)占用大量篇幅羅列源碼,所以讀者在閱讀本文時(shí),手頭最好有Android源碼,結(jié)合源碼來解讀。本文講述MediaScanner的架構(gòu)。

          MediaScanner是Android系統(tǒng)Media的基礎(chǔ),系統(tǒng)啟動(dòng)之初,就掃描出Media文件供后續(xù)使用,有新媒體加入或者刪除掉媒體文件,也需要更新相應(yīng)的媒體庫。Android的Music、Gallery等播放或呈現(xiàn)媒體文件的程序也都基于穩(wěn)定的MediaScanner掃描媒體文件的結(jié)果,否則,會(huì)發(fā)現(xiàn)程序操作的Media文件的URI根本不是實(shí)際對(duì)應(yīng)的Media文件,或者甚至來電鈴聲和鬧鈴等都會(huì)有問題。

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

      下圖是packages/providers/MediaProvider下的AndroidManifest的內(nèi)容:

      MediaScanner Architecture

      •  MediaScannerReceiver是一個(gè)BroadcastReceiver,接收廣播,進(jìn)行媒體掃描,這也是MediaScanner提供給外界的接口之一。收到廣播之后啟動(dòng)MediaScannerService具體執(zhí)行掃描工作。
      •  MediaScannerService是一個(gè)Service,負(fù)責(zé)媒體掃描,它還要用到Framework中的MediaScanner來共同完成具體掃描工作,掃描的結(jié)果在MediaProvider提供的數(shù)據(jù)庫中。
      •  MediaProvider是一個(gè)ContentProvider,媒體庫(Images/Audio/Video/Playlist等)的數(shù)據(jù)提供者。負(fù)責(zé)操作數(shù)據(jù)庫,并提供給別的程序insert、query、delete、update等操作。

      另外,IMediaScannerService和IMediaScannerListenter這兩個(gè)Interface提供給其他程序通過AIDLIPC調(diào)用掃描單個(gè)文件的能力。定義在framework中,Service中實(shí)現(xiàn)接口。

       

      下面針對(duì)MediaScanner中的各個(gè)部分,分別講解:

      Android MediaScanner:(一)MediaScanner總體架構(gòu)

              講述MediaScanner的架構(gòu)。

      Android MediaScanner:(二)MediaScannerReceiver

              講述MediaScannerReceiver針對(duì)來自Broadcast的不同請(qǐng)求所做的處理。

      本文是筆者的分析歸納,并用UML圖(ClassDiagram/Sequence Diagram)來呈現(xiàn)。雖然來源于對(duì)Android源碼的分析,但文中不會(huì)占用大量篇幅羅列源碼,所以讀者在閱讀本文時(shí),手頭最好有Android源碼,結(jié)合源碼來解讀。本文講述MediaScanner的入口MediaScannerReciever針對(duì)不同Broadcast的請(qǐng)求所做的處理。

       

      上文中的圖中可以講到,MediaScannerReceiver處理三種Broardcast請(qǐng)求:

      •  BOOT_COMPLETED 系統(tǒng)啟動(dòng)之后,掃描內(nèi)部Media文件;
      •  MEDIA_MOUNTED 外部存儲(chǔ)卡掛載之后,掃描外部Media;
      •  MEDIA_SCANNER_SCAN_FILE 掃描外部存儲(chǔ)器上的一個(gè)媒體文件。

      下圖MediaScanner針對(duì)每一種請(qǐng)求的處理:

      MediaScannerReceiver

      •  如果收到的是BOOT_COMPLETED,設(shè)置參數(shù)“volume”為“internal”,通過startService()啟動(dòng)MediaScannerService開始內(nèi)部Media文件掃描;
      •  如果收到的是MEDIA_MOUNTED 并且path是“/mnt/sdcard”,設(shè)置參數(shù)“volume”為“external”,通過startService()啟動(dòng)MediaScannerService開始外部整個(gè)Media文件掃描;
      •  如果收到的是MEDIA_MOUNTED 并且path是“/mnt/sdcard”,設(shè)置參數(shù)“volume”為“external”,“folder”為所要掃描的路徑,通過startService()啟動(dòng)MediaScannerService開始對(duì)外部某個(gè)路徑進(jìn)行Media文件掃描;
      •  如果收到的是MEDIA_SCANNER_SCAN_FILE ,設(shè)置參數(shù)“filepath”為獲取到的文件,通過startService()啟動(dòng)MediaScannerService開始對(duì)外部某個(gè)文件進(jìn)行掃描。

       

      小結(jié)】本文講述MediaScanner的入口MediaScannerReciever針對(duì)不同Broadcast的請(qǐng)求(BOOT_COMPLETED/MEDIA_MOUNTED/ MEDIA_SCANNER_SCAN_FILE)所做的處理。

      掃描如何實(shí)現(xiàn)的,接下來看MediaScannerService中的實(shí)現(xiàn)。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多