2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报

Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

一 图库数据管理

Gallery2的数据管理 DataManager(职责:管理数据源)- MediaSource(职责:管理数据集) - MediaSet(职责:管理数据项)。DataManager中初始化所有的数据源(LocalSource, PicasaSource, MtpSource, ComboSource, ClusterSource, FilterSource, UriSource, SnailSource),将数据源放到一个Hash表中,提供存取操作。MediaSource负责管理数据集,以LoacalSource为例,从他的createMediaObject函数可以看出,根据路径他可以创建出LocalMediaSet, LocalMedia, LocalImage, LocalVideo等。MediaSet负责管理数据项MediaItem. 图库数据管理简要图如图-1


图-1:图库数据管理简化图

二 数据项(MediaItem)的加载过程。

下面介绍一下,Albumpage加载缩略图列表的过程为例子。AlbumSetPage加载相册缩略图和PhotoPage加载大图的过程,请读者自行分析。

在相册页面(AlbumPage)和缩略图数据加载相关的有两个成员变量AlbumDataLoader和AlbumSlotRender。AlbumDataLoader负责维护要加载数据提供一个管理,将要加载的数据项MediaItem放在链表中进行存取操作,动态的增删改查操作。在AlbumPage类的Onresume函数中调用了AlbumDataLoader的resume,AlbumDataLoader的resume创建了一个线程,随时处理数据的变化(MediaItem的增删改查)。AlbumDataLoader的作用过程见图2。

图-2:AlbumDataLoader的作用过程

       AlbumDataLoader负责数据模型的维护,AlbumSlotRender负责数据的缩略图的加载工作,为了提高性能,数据加载使用了【线程池】。AlbumSlotRender从AlbumDataLoader获取要加载的数据MediaItem, 根据每一个MediaItem的状态确定是是否Bitmap缩略图的是需要加载、回收、还是等待等。对于需要加载的缩略图,提交到线程池中。AlbumSlotRender的作用过程见图3。数据加载过程中,【同步问题】其实也是需要重点分析的,由于时间有限,这里就缩略了,见谅!

图-3:AlbumSlotRender的作用过程

三 后续代码分析,大致提纲

Android4.0图库Gallery2代码分析(三) 状态管理和窗口切换

Android4.0图库Gallery2代码分析(四) 消息处理(点击和手势)

Android4.0图库Gallery2代码分析(五) 各种数据源和数据源的管理

Android4.0图库Gallery2代码分析(六) 可渲染数据元及其多样性

Android4.0图库Gallery2代码分析(七) 遥控器控制的实现

Android4.0图库Gallery2代码分析(八) 和数据扫描线程的数据交互

Android4.0图库Gallery2代码分析(九) 几点可优化的地方

Android4.0图库Gallery2代码分析(二) 数据管理和数据加载的更多相关文章

  1. Android4.0图库Gallery2代码分析(一) 程序整体结构

    Android4.0图库Gallery2代码分析(一) 程序整体结构 Gallery2的用例图分析:Gallery2主要功能是实现本地存储器.MTP存储器和网络存储器中媒体(图像和视频)的浏览.显示和 ...

  2. android4.0 的图库Gallery2代码分析(二)

    最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...

  3. Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)

    最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...

  4. Android5.1图库Gallery2代码分析数据加载流程

    图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->Photo ...

  5. MPP 二、Greenplum数据加载

    Loading external data into greenplum database table using different ways... Greenplum 有常规的COPY加载方法,有 ...

  6. android4.0 的图库Gallery2代码分析(三) 之Applition的初始化准备

    Applition的初始化准备 图库的一切动作都明显地起源于Application.这是区别与其他那种感觉不到Application存在,仅仅感觉到Activity存在的简单应用的一个特点. 图库的a ...

  7. Openvswitch原理与代码分析(3): openvswitch内核模块的加载

      上一节我们讲了ovs-vswitchd,其中虚拟网桥初始化的时候,对调用内核模块来添加虚拟网卡.   我们从openvswitch内核模块的加载过程,来看这个过程.   在datapath/dat ...

  8. TouTiao开源项目 分析笔记8 图解分析数据加载方式

    1.整体构架 1.1.以一个段子页面为例,列出用到的主要的类,以图片的方式展示. 1.2.基础类 这里最基础的接口有:   IBaseView<T>==>定义了5个方法. 然后最基础 ...

  9. android4.0 的图库Gallery2代码分析(一)

    最近迫于生存压力,不得不给人兼职打工.故在博文中加了个求点击的链接.麻烦有时间的博友们帮我点击一下.没时间的不用勉强啊.不过请放心,我是做技术的,肯定链接没病毒,就是我打工的淘宝店铺.嘻嘻.http: ...

随机推荐

  1. Html:upload

    文件上传框 有时候,需要用户上传自己的文件,文件上传框看上去和其它 文本域差不多,只是它还包含了一个浏览按钮.访问者可以通 过输入需要上传的文件的路径或者点击浏览按钮选择需要上传 的文件. 代码格式: ...

  2. Git的安装

    两种方法: 1.命令行git Git preview是命令行Git的安装包,包名如下: Git-1.9.2-preview20140411.exe 2.UI类型的git 图形化界面的git,避免了枯燥 ...

  3. “Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”

    1. 有可能你的客户端已经安装过了,需要移调才能安装2. 你的清单文件AndroidManifest.xml写的有问题,检查一下

  4. Win7 “Bluetooth设置”对话框无法打开,及无法查找到设备

    方法是在百度上找到的,试用成功. 1.打开开始菜单中的运行选项,然后在对话框中输入services.msc,回车打开服务界面: 2.然后在弹出来的服务窗口中查找到Bluetooth Support S ...

  5. 经验分享:Xcode 创建.a和framework静态库

    最近因为项目中的聊天SDK,需要封装成静态库,所以实践了一下创建静态库的步骤,做下记录. 库介绍 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. iOS中的 ...

  6. 8.1 sikuli报错: 提示没有对应的javaw

    对于sikuli,需要安装32位的jdk且不能高于1.7的版本. 对于64位系统的C盘,Program Files文件夹是64位的,Program File(x86)文件夹是32位的 需要安装一个32 ...

  7. css3的box-sizing

    给了两个并排带边框的div百分比宽度,假如不用box-sizing,边框的宽度会在行内显示.用box-sizing:border-box,可以去除边框的占位. 浏览器支持IE9以上及火狐.谷歌.Ope ...

  8. iOS 枚举写法

    1.第一种 typedef enum { kPRStateNormal = 0, kPRStatePulling = 1, kPRStateLoading = 2, kPRStateHitTheEnd ...

  9. liunx 定时执行 php文件

    which php    寻找php路径

  10. stdafx文件介绍

    MSDN介绍: These files are used to build a precompiled header file Projname.pch and a precompiled types ...