http://hi.baidu.com/%D6%C7%B4%EF%B8%DF%D4%B6lee/blog/item/b4ecabff0b5e9257d6887df0.html
第一,在应用程序中有三个线程存在:主线程(随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步这个过程
分享到:
相关推荐
在"gallery3d源码学习总结(三)——Cache缓存及数据处理流程"中,可能讲解了如何有效地缓存图片和处理数据,以优化性能和用户体验。在3D滚动场景中,高效的缓存策略能确保即使在快速滚动时,图片加载仍然流畅。而...
可能的优化方法包括使用`BitmapOptions`进行位图解码配置、利用`LruCache`或`MemoryCache`缓存图片、使用`AsyncTask`异步加载图片等。 6. **自定义滚动行为**:源代码可能包含了如何自定义Gallery的滚动行为,比如...
7. **毕业设计/课程设计**:这个项目作为毕业设计或课程设计示例,意味着它可能是对Android开发基础的一个综合实践,涵盖了网络请求、图片处理、UI设计、数据管理等多个方面,适合初学者理解和学习。 通过以上分析...
源码中可能会实现LRU Cache(最近最少使用)或其他缓存策略。 6. **图片处理**: 在加载网络图片时,可能需要对图片进行缩放、裁剪等处理,以适应不同的设备分辨率和屏幕尺寸。这可能涉及到Bitmap的配置,比如使用...
- **内存缓存**:使用LRU Cache或其他缓存策略存储已加载的图片,减少重复加载。 - **磁盘缓存**:将图片保存在本地磁盘,避免频繁的网络请求。 - **图片压缩**:根据显示需求对图片进行适当的压缩,减少内存占用。 ...
1. 使用`LruCache`或`MemoryCache`缓存图片,避免频繁的IO操作。 2. 使用异步加载,如`AsyncTask`,防止UI线程阻塞。 3. 对大图进行缩放处理,防止内存溢出。 综上所述,"Gallery从SD卡中获取图片,并显示"这个项目...
- 软件界面中的主要功能区,包含文件操作、编辑工具、视图选项、标记管理、回放控制、色彩校正、节点编辑及帮助文档等。 #### 二、文件与编辑 - **文件**: File - 包含“新建项目”、“新建夹子”等菜单项,用于...
- **浏览器缓存**: 利用浏览器的本地存储(如localStorage或IndexedDB)保存图片数据,或者使用HTTP缓存控制头(如`Cache-Control`和`ETag`)实现客户端缓存。 - **内存管理**: 需要处理好内存中的图片缓存,防止...
- **Memory & Image Cache<内存和图像高速缓存>**:设置内存和图像缓存的选项。 - **Adobe Online**:连接Adobe在线服务的选项。 - **Workflows Options<工作流程选项>**:设置工作流程的选项。 #### 三、Image...
- **全部(All)**:清除所有缓存数据。 - **颜色设置(Color Settings)**:设置颜色配置文件和色彩管理选项。 - **预设管理器(Preset Manager)**:管理预设文件。 - **首选项(Preferences)**: - **常规(General)**...
6. **Cache**:缓存目录通常用于存储预生成的HTML页面或数据,以提高网站的加载速度和性能。在atimgallery中,缓存可能是用来存储已经处理过的图片信息或者目录列表,避免每次请求都重新计算,从而降低服务器负担。 ...
同时,为了提高用户体验,会使用内存缓存和磁盘缓存相结合的方式,如LruCache和File Cache。这些缓存策略的实现涉及到Android的并发编程和文件操作。 在性能优化方面,Grallery3D源码展示了如何利用Bitmap的配置...
在这个"CPNT 262-分配4"中,学生将学习如何使用现代JavaScript技术与服务器进行通信,获取和处理JSON数据,以及如何创建动态交互的Web应用程序。通过这个项目,他们将加深对异步编程、JSON格式和DOM操作的理解,这些...
说明如何获取应用的文件存储路径和缓存路径,以便更好地管理应用数据。 - **5.17 打开/关闭WiFi服务** 展示如何控制WiFi的开关状态,实现网络连接的自动化管理。 - **5.18 取得SIM卡内的信息** 介绍如何读取SIM...
- **Memory & Image Cache(内存与图像缓存)**:设置内存和图像缓存使用。 - **Adobe Online(在线服务)**:访问Adobe的在线服务。 - **Workflows Options(工作流选项)**:设置工作流选项。 ### 图像(Image)相关...
4. **Service Worker**:Service Worker允许在后台运行脚本,处理网络请求,实现离线缓存和数据存储,从而提供离线功能。 5. **离线存储策略**:应用可能使用Cache API或者IndexedDB来存储图片和其他资源,以便在...
此外,还可以利用LruCache或者MemoryCache进行图片的内存缓存。 6. 文件系统操作:为了加载本地图片,需要熟悉Android的文件系统,了解如何读取SD卡或内部存储的图片文件。 7. UI设计:良好的用户界面是图片浏览器...
例如,加载网页数据可使用 `loadData` 或 `loadDataWithBaseURL` 方法,清除缓存则调用 `clearCache`。 2. **Android 控件之 TabHost** TabHost 是用于创建带有标签页界面的组件,可以组合多个小部件(如 ...
4. 服务器端数据处理:根据客户端提交的父ID,从数据库中检索出所有子分类信息,并以一定格式返回给前端。 ### 具体实现步骤解析 #### 1. 数据库设计 在文章提供的内容中,数据库设计可能类似于: ``` id...