`
java-admin
  • 浏览: 1384619 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

浅析Android MediaProvider之二

阅读更多

http://www.poemcode.net/2010/01/android_mediaprovider_2/

 

MediaProvider 的实质是 Android 的 Core Applications 之一,和 Market 的 app 一样,并无神秘之处,其重要性就是提供了对 media 的操作,而刨根究底,这一操作正是通过同名类 MediaProvider 来实现的。

查阅该类源码,规模不小,再加以纠缠着内部类,第一眼很容易发懵,耐下性子整理出类图如下。正所谓“一个好汉三个帮”,单打独斗固然可以呈现出盖世英雄之势,但是若能团结众人,融合各方能力则能成就一番霸业。史书上的股市是这样,软件开发也如此,大到一个软件产品需要团队来开发,小到一个细微功能也是需要若干相关类来协同。此间利害可以由类图一目了然。

MediaProvider Class Diagram

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,而内部存储则是不会被替换的。

分享到:
评论

相关推荐

    android MediaProvider和MediaScanner详解

    MediaProvider是Android系统中用于管理媒体文件的Content Provider,而MediaScanner则是与之协同工作的一个后台服务,它负责扫描媒体文件并更新系统数据库。 首先,从AndroidManifest.xml文件的分析可知,...

    Mediaprovider简介

    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(电视直播视频)apk文件 ...

    MediaProvider

    - **作用**:通过调用此方法可以将特定存储卷的数据纳入到`MediaProvider`的管理范围之内,便于后续的数据访问操作。 #### 三、核心URI定义 ##### 3.1 内部存储URI - **URI**:`content://media/internal` - **...

    Android4.4下MediaProvider无法向外置SD卡中文件写数据的解决方法

    2. 运行时权限请求:由于Android 6.0(Marshmallow)及更高版本引入了运行时权限,即使在Manifest中声明了权限,也需要在运行时请求用户授权。可以使用`ActivityCompat.requestPermissions()`方法进行请求。 3. ...

    深入理解android 卷II 第7章

    - **MediaProvider.java**:此文件位于`package/providers/MediaProvider/src/java/com/android/MediaProvider/`目录下,是MediaStore的底层实现,负责管理多媒体文件的存储和检索。 - **SQLiteDatabase.java**:此...

    media provider源码

    在Android系统中,`MediaProvider`是一个至关重要的组件,它是一个ContentProvider的实现,负责管理和提供设备上的多媒体数据,如图片、音频和视频文件。深入理解`MediaProvider`的源码可以帮助开发者更好地理解和...

    Android安卓经典设计例程源代码-MediaProviderSample.rar

    MediaProvider是Android中的一个ContentProvider子类,它是Android四大组件之一,负责数据存储和共享。ContentProvider主要作用是将应用程序的数据暴露给其他应用程序,使得数据可以在不同的应用之间进行交互。...

    Android应用源码之MediaProviderSample.zip

    MediaProvider是Android系统中内置的ContentProvider之一,它实现了对多媒体文件的CRUD(创建、读取、更新、删除)操作。ContentProvider是Android四大组件之一,为其他应用程序提供数据访问接口,使得不同应用间的...

    Android 获取音乐文件的信息

    Android 获取音乐文件的信息 Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,并且提供了一套数据库表格,通过Content Provider的方式提供给用户。

    Android应用源码之MediaProviderSample-IT计算机-毕业设计.zip

    MediaProvider是Android系统中用于管理和提供多媒体数据的核心组件,本篇文章将深入探讨MediaProviderSample的应用场景、工作原理以及其源码中的关键知识点。 一、MediaProvider概述 MediaProvider是Android的...

    Android_MediaScanner__详尽分析

    Android MediaScanner 是Android系统中用于媒体文件管理和索引的服务。它是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 心系两界...

    android mediaScannder框架介绍

    2. **预扫描**:清除旧的文件和播放列表缓存,然后根据MediaProvider的请求生成新的缓存条目。这确保了系统能跟踪最新的媒体文件状态。 3. **处理目录**:在C++层,MediaScanner遍历指定目录及其子目录。每个文件...

    安卓Android源码——MediaProviderSample.rar

    在Android系统中,`MediaProvider`是一个非常关键的组件,它是Android系统提供的内容提供者(Content Provider)之一,专门用于管理设备上的多媒体数据,如图片、音频和视频等。`MediaProviderSample`则是一个示例...

    Android-RetroMusic-Android最好的materialdesign音乐播放器

    该应用凭借其优秀的用户体验和强大的功能,被誉为Android系统中最佳的音乐播放解决方案之一。本文将详细探讨其在Android开发中的核心技术和实现策略。 1. Material Design应用实践: Material Design是Google推出...

    Android媒体库框架(mediascanner).doc

    MediaScanner 是 Android 系统中的一个核心组件,负责扫描磁盘文件,对元信息的处理,并通过 MediaProvider 保存到 MediaStore 中。MediaScanner 可以通过手动控制,在 Android 系统中,已经定制了三种事件会触发 ...

    Android 4.4及以上版本写入外置SD卡问题

    由于现在大多数手机都是带有内存的,原本获取外置SD卡路径的方法Environment.getExternalStorageDirectory() 获取得到的是手机自身内存的根目录。那么我们要怎么来获取到外置SD卡的路径,首先需要A判断是否挂载了sdk...

    Android系统自带的图库源码

    在Android中,图库内容提供者(MediaProvider)是核心组件,它管理着所有媒体文件的信息,包括图片、音频和视频。源码中会包含如何查询、插入、更新和删除媒体文件的API,这对于实现自定义媒体管理应用至关重要。 ...

    深入理解Android卷一 文字全彩版

    Android系统架构深度解析: Android是Google推出的智能手机开发平台,其底层基于Linux内核。...而Java Application层包括了MediaProvider和Phone等应用组件。通过本书的阅读,读者可以对Android系统有更深入的理解。

Global site tag (gtag.js) - Google Analytics