Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
2015-10-09 19:25
447 查看
Android4.0图库Gallery2代码分析(二) 数据管理和数据加载
2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报代码分析android相册优化工作
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
![](http://img.my.csdn.net/uploads/201209/07/1346987540_6813.png)
图-1:图库数据管理简化图
二 数据项(MediaItem)的加载过程。
下面介绍一下,Albumpage加载缩略图列表的过程为例子。AlbumSetPage加载相册缩略图和PhotoPage加载大图的过程,请读者自行分析。
在相册页面(AlbumPage)和缩略图数据加载相关的有两个成员变量AlbumDataLoader和AlbumSlotRender。AlbumDataLoader负责维护要加载数据提供一个管理,将要加载的数据项MediaItem放在链表中进行存取操作,动态的增删改查操作。在AlbumPage类的Onresume函数中调用了AlbumDataLoader的resume,AlbumDataLoader的resume创建了一个线程,随时处理数据的变化(MediaItem的增删改查)。AlbumDataLoader的作用过程见图2。
![](http://img.my.csdn.net/uploads/201209/07/1346985240_5876.png)
图-2:AlbumDataLoader的作用过程
AlbumDataLoader负责数据模型的维护,AlbumSlotRender负责数据的缩略图的加载工作,为了提高性能,数据加载使用了【线程池】。AlbumSlotRender从AlbumDataLoader获取要加载的数据MediaItem, 根据每一个MediaItem的状态确定是是否Bitmap缩略图的是需要加载、回收、还是等待等。对于需要加载的缩略图,提交到线程池中。AlbumSlotRender的作用过程见图3。数据加载过程中,【同步问题】其实也是需要重点分析的,由于时间有限,这里就缩略了,见谅!
![](http://img.my.csdn.net/uploads/201209/07/1346985235_9413.png)
图-3:AlbumSlotRender的作用过程
三 后续代码分析,大致提纲
Android4.0图库Gallery2代码分析(三) 状态管理和窗口切换
Android4.0图库Gallery2代码分析(四) 消息处理(点击和手势)
Android4.0图库Gallery2代码分析(五) 各种数据源和数据源的管理
Android4.0图库Gallery2代码分析(六) 可渲染数据元及其多样性
Android4.0图库Gallery2代码分析(七) 遥控器控制的实现
Android4.0图库Gallery2代码分析(八) 和数据扫描线程的数据交互
Android4.0图库Gallery2代码分析(九) 几点可优化的地方
相关文章推荐
- React-native Android Java Module如何暴露自己的方法给js
- Android开发中CheckBox的setOnClickListener和setOnCheckedChangeListener的不同之处在哪?
- android pppoe
- Android使用AIDL与远端服务交互
- android入门
- Android Fragment 真正的完全解析(下)
- Android中联系人和通话记录详解(联系人的增删改查)(3)
- Android抽屉(SlidingDrawer --类似android通知栏下拉效果)
- Android每日范例——TextView的HTML效果
- Android 获取字符串在屏幕上的宽度
- Android三种播放视频的方式
- 在手机上执行Enumeration intfs=NetworkInterface.getNetworkInterfaces();抛出socketexception
- android键盘弹出头部上移处理
- android录制更大视频文件的修改
- android控件的属性
- 千里之行,始于足下(二)-------创建基类
- Android 学习笔记-- 开发环境 和 hello world
- android 实践- 2015-09-12
- android项目混淆打包注意事项
- com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: current time: