http://www.poemcode.net/2010/01/android_mediaprovider_2/
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
从类图中可以看到其结果比较简单,onCreate 和 onUpgrade 执行创建和升级的操作,显得较为简单,相较之下 onOpen 方法就要复杂一下。首先要明白该方法的目的是什么。通过注释可以知道其做两件事情,第一是更新数据库文件的修改时间,第二是删除多余的、旧的数据库。
此处的删除操作,为的是“垃圾回收”,以便让出存储空间。那么究竟什么是“旧”?什么是多余?这里须依照一个策略,那就是 LRU,LRU 是 Least Recently Uesd 的简写,通过该策略将两个月内未访问的数据库一概清除,执行完以后再判断剩下的数据库个数是否超出了限制,–Android 为每个外部存储设备建立一个独立的数据库,即 SDCard A 的信息是保存在一个数据库,SDCard B 则是保存在另一个数据库。如果超出限制,则从这些数据库中找出时间最早的一个,删除它,然后继续循环。
这里需要提醒一点,不管怎么删除数据库,内部存储对应的数据库是不删除的,–因为外部存储可能经常被用户插拔不同的 SDCard,而内部存储则是不会被替换的。
分享到:
相关推荐
MediaProvider是Android系统中用于管理媒体文件的Content Provider,而MediaScanner则是与之协同工作的一个后台服务,它负责扫描媒体文件并更新系统数据库。 首先,从AndroidManifest.xml文件的分析可知,...
Mediaprovider的简单说明。 MediaProvider包括五个类: com.android.providers.media.MediaProvider com.android.providers.media.MediaScannerCursor com.android.providers.media.MediaScannerReceiver ...
apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 MediaProvider(电视直播视频)apk文件 ...
- **作用**:通过调用此方法可以将特定存储卷的数据纳入到`MediaProvider`的管理范围之内,便于后续的数据访问操作。 #### 三、核心URI定义 ##### 3.1 内部存储URI - **URI**:`content://media/internal` - **...
2. 运行时权限请求:由于Android 6.0(Marshmallow)及更高版本引入了运行时权限,即使在Manifest中声明了权限,也需要在运行时请求用户授权。可以使用`ActivityCompat.requestPermissions()`方法进行请求。 3. ...
- **MediaProvider.java**:此文件位于`package/providers/MediaProvider/src/java/com/android/MediaProvider/`目录下,是MediaStore的底层实现,负责管理多媒体文件的存储和检索。 - **SQLiteDatabase.java**:此...
在Android系统中,`MediaProvider`是一个至关重要的组件,它是一个ContentProvider的实现,负责管理和提供设备上的多媒体数据,如图片、音频和视频文件。深入理解`MediaProvider`的源码可以帮助开发者更好地理解和...
MediaProvider是Android中的一个ContentProvider子类,它是Android四大组件之一,负责数据存储和共享。ContentProvider主要作用是将应用程序的数据暴露给其他应用程序,使得数据可以在不同的应用之间进行交互。...
MediaProvider是Android系统中内置的ContentProvider之一,它实现了对多媒体文件的CRUD(创建、读取、更新、删除)操作。ContentProvider是Android四大组件之一,为其他应用程序提供数据访问接口,使得不同应用间的...
Android 获取音乐文件的信息 Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。
MediaProvider是Android系统中用于管理和提供多媒体数据的核心组件,本篇文章将深入探讨MediaProviderSample的应用场景、工作原理以及其源码中的关键知识点。 一、MediaProvider概述 MediaProvider是Android的...
Android MediaScanner 是Android系统中用于媒体文件管理和索引的服务。它是Android平台多媒体框架的一个组成部分,负责扫描设备上的媒体文件,并将相关信息更新到媒体数据库中,以便其他应用程序(如音乐播放器、...
第2章 深入理解Java Binder和MessageQueue 2.1 概述 2.2 Java层中的Binder架构分析 2.2.1 Binder架构总览 2.2.2 初始化Java层Binder框架 2.2.3 addService实例分析 2.2.4 Java层Binder架构总结 2.3 心系两界...
2. **预扫描**:清除旧的文件和播放列表缓存,然后根据MediaProvider的请求生成新的缓存条目。这确保了系统能跟踪最新的媒体文件状态。 3. **处理目录**:在C++层,MediaScanner遍历指定目录及其子目录。每个文件...
在Android系统中,`MediaProvider`是一个非常关键的组件,它是Android系统提供的内容提供者(Content Provider)之一,专门用于管理设备上的多媒体数据,如图片、音频和视频等。`MediaProviderSample`则是一个示例...
该应用凭借其优秀的用户体验和强大的功能,被誉为Android系统中最佳的音乐播放解决方案之一。本文将详细探讨其在Android开发中的核心技术和实现策略。 1. Material Design应用实践: Material Design是Google推出...
MediaScanner 是 Android 系统中的一个核心组件,负责扫描磁盘文件,对元信息的处理,并通过 MediaProvider 保存到 MediaStore 中。MediaScanner 可以通过手动控制,在 Android 系统中,已经定制了三种事件会触发 ...
由于现在大多数手机都是带有内存的,原本获取外置SD卡路径的方法Environment.getExternalStorageDirectory() 获取得到的是手机自身内存的根目录。那么我们要怎么来获取到外置SD卡的路径,首先需要A判断是否挂载了sdk...
在Android中,图库内容提供者(MediaProvider)是核心组件,它管理着所有媒体文件的信息,包括图片、音频和视频。源码中会包含如何查询、插入、更新和删除媒体文件的API,这对于实现自定义媒体管理应用至关重要。 ...
Android系统架构深度解析: Android是Google推出的智能手机开发平台,其底层基于Linux内核。...而Java Application层包括了MediaProvider和Phone等应用组件。通过本书的阅读,读者可以对Android系统有更深入的理解。