MediaProvider 的实质是 Android 的 Core Applications 之一,和 Market 的 app 一样,并无神秘之处,其重要性就是提供了对 media 的操作,而刨根究底,这一操作正是通过同名类 MediaProvider 来实现的。
查阅该类源码,规模不小,再加以纠缠着内部类,第一眼很容易发懵,耐下性子整理出类图如下。正所谓“一个好汉三个帮”,单打独斗固然可以呈现出盖世英雄之势,但是若能团结众人,融合各方能力则能成就一番霸业。史书上的股市是这样,软件开发也如此,大到一个软件产品需要团队来开发,小到一个细微功能也是需要若干相关类来协同。此间利害可以由类图一目了然。
MediaProvider Class Diagram
Android 在数据存储方面给出了四个建议,其中 Database 和 Preferences 用处最广,而 MediaProvider 正是采用了 Database 保存 media 的信息。在 Android 中,凡出现 SQLite 的地方,几乎就可以找到 SQLiteOpenHelper 的影子,在 MediaProvider 中一样如此。根据 Reference 的介绍可以知道该类的用途:
<this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary