首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android Gallery3D源码学习小结(三)——Cache缓存及数据处理流程

2012-07-27 
Android Gallery3D源码学习总结(三)——Cache缓存及数据处理流程第一,在应用程序中有三个线程存在:主线程(随

Android Gallery3D源码学习总结(三)——Cache缓存及数据处理流程

第一,在应用程序中有三个线程存在:主线程(随activity的声明周期启动销毁)、feed初始化线程(进入程序时只运行一次,用于加载相册初始信息)、feed监听线程(一直在跑,监听相册和相片的变更)。

第二,不考虑CacheService 启动的主要流程归纳如下:

1.首次进入程序Gallery调用onCreate,此时发送初始化消息进入消息队列;然后Gallery调用onResume,向下进入GridLayer的onResume,如果此时Mediafeed对象没有进行初始化则什么也不干(第一次一般都是这样),否则调用Mediafeed的onResume;

2.处理消息队列中的HANDLE_INTENT消息,Gallery处理这个消息会初始化数据源,从而调用GridLayer的setDataSource方法,这个方法会触发底层MediaFeed的启动方法start,执行完后启动feed监听线程 继续执行MediaFeed的run方法。

start方法会作两件事:调用自己底层的重新开始方法onResume,onResume中会为图像和视频这两个媒体源分别增加“内容变化监听器”,并请求马上刷新这两个媒体源(加入全局的刷新请求列表);启动feed初始化线程mAlbumSourceThread。

3.其中MediaFeed初始化线程的工作是:调用MediaFeed的loadMediaSets加载相册,它又调用了下层LocalDataSource中的refresh方法(查询数据库是否有相册变化,新增或修改feed中相应的MediaSet相册的名字)和loadMediaSets方法(调用下层CacheService.loadMediaSets方法,这个方法下面会重点展开)加载所有相册和相册中的所有相片信息。

4.MediaFeed监听线程MediaFeed.run()的工作是:根据“内容变化监听器“返回的媒体变动消息(增删改),持续不断的更新MediaFeed中的相册和相片变量。

具体机制是这样的,如果全局的刷新请求列表中有内容,则调用LocalDataSource.refresh进行相册信息的更新(其中LocalDataSource.refresh调用了CacheService的computeDirtySets),然后run遍历每个相册并调用dataSource.loadItemsForSet()方法为相册加载相片记录。

第三,不考虑CacheService 新增和删除相片文件夹的主要流程归纳如下:

1.对应【用相机照相后退回主程序,生成camera文件夹】部分,首先GridLayer判断mMediaFeed非空即已经初始化过,则直接调用MediaFeed.onResume方法,上面提到它会为图像和视频这两个媒体源分别增加“内容变化监听器”,并将其加入全局的刷新请求列表。

2.可别忘了MediaFeed监听线程MediaFeed.run()方法,它一直在默默无闻的等待者全局的刷新请求列表有所变化。这时第二中的4这个步骤又被激活了,这之后更新相册和相片信息就是自然的了。

3.对应【删除这个camera文件夹】,也是走的第2步这个过程。

1 楼 wantyer 2012-03-13   你好。我现在也需要修改Gallery3D的源码。 但对其扫描SDcard的媒体文件这个过程不明白。
所以,想请教你。 可以加个QQ么。 你的QQ是多少。
如果你直接加我的QQ那就更好了。我的QQ:82455896. 2 楼 WangQingHua123 2012-04-23   你好, 我也再改Gallery3D的源码, 遇到了相关问题想请教下, 你的QQ多少. 能否加我QQ. 的我QQ是: 2403152992

热点排行