在移动应用开发。我们经常从网络请求到该设备显示遇到的场景图片。

假设多次发动每个请求,废物流、浪费电。;

将图片持久化到磁盘也不失为一种策略;但每次从文件读取图片也存在一定的io开销,就算採用此策略,我们也须要控制磁盘缓存的容量。以免占用过多系统资源。

事实上没有一个方案能够说是完美的方案,仅仅有最适合自己业务需求的方案。才干够说是一个好方案。

我们以下所解说的方案具备非常强的通用性,设计思路简单而清晰:

1.如果每一个网络图片的url具有唯一性。如果网络上的图片变化了,会引起输入源的url变化;

2.基于1,我们将url作为图片缓存的唯一标识(能够做hash,做md5,也能够用urlstring作为key,都是能够的)

3.訪问优先级:内存缓存>磁盘缓存>网络资源

以上3点就是我们这个方法的基本策略。下面是技术细节:

1.对于缓存的管理,我们能够设置阀值(包含缓存存在时间和缓存容量),达到条件触发清理;还能够结合LRU(Least Recently Used 最近最少使用算法)算法来提升缓存訪问效率,这须要在写缓存时对缓存的使用次数进行对应标记,此处对此算法不展开,有兴趣的自行google.

2.对于网络资源的载入我们必须採用异步的方案,如此做才不会堵塞ui的展示;能够将请求加到队列中支持并发请求,须要注意的是我们能够依据某个地址能够支持同一时候连接的url数量来设置最大并发请求数目。来提高效率。

3.在訪问磁盘缓存/网络资源成功时。须要填充高优先级的缓存。当磁盘缓存訪问成功时。填充内存缓存;当网络资源訪问成功时,填充内存缓存+磁盘缓存。



对于详细的使用场合我们能够依据业务须要来决定是否採纳或部分採纳此方案,也能够对此方案中的一些策略依据项目须要进行改动(比方何时不訪问磁盘缓存、何时清空缓存、何时强制刷新缓存等)。来满足业务需求。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb3BlbmdsbmV3YmVl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

版权声明:本文博主原创文章。如需转载,请发送电子邮件至openglnewbee@163.com。

移动应用开发(IOS/android等一下)在一般图像缓存方案评述(附流程图)的更多相关文章

  1. Xamarin体验:使用C#开发iOS/Android应用

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发.   简介 Xamarin是基于Mo ...

  2. 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案

    微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...

  3. 移动开发iOS&Android对比学习--异步处理

    在移动开发里很多时候需要用到异步处理.Android的主线程如果等待超过一定时间的时候直接出现ANR(对不熟悉Android的朋友这里需要解释一下什么叫ANR.ANR就是Application Not ...

  4. VS2015安装开发ios android

    前几天很火,装了一下,结果是不是太满意,装了VS2015只是多了一个android和ios的模版,最终还是要装xamarin ,最后装了个xamarin ,然后破解 破解地址:http://www.c ...

  5. Android进阶图片处理之三级缓存方案

    图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...

  6. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  7. javascript开发 ios和android app的简单介绍

    先看几个名词解释: nodejs ionic,Cordova,phoneGap,anjularjs react-native,reactjs nodeJs 的介绍参见这里,写的很好http://www ...

  8. [Hadoop 周边] 浅谈大数据(hadoop)和移动开发(Android、IOS)开发前景【转】

    原文链接:http://www.d1net.com/bigdata/news/345893.html 先简单的做个自我介绍,我是云6期的,黑马相比其它培训机构的好偶就不在这里说,想比大家都比我清楚: ...

  9. 职业定位(移动端、ios开发、Android开发)

    移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...

随机推荐

  1. 在CodeBlocks 开发环境中配置使用OpenCV (ubuntu系统)

    CodeBlocks是一个开放源代码的全功能的跨平台C/C++集成开发环境.CodeBlocks由纯粹的C++语言开发完毕,它使用了蓍名的图形界面库wxWidgets.对于追求完美的C++程序猿,再也 ...

  2. android关于实现滑动界面

    首先要说的是,滑动界面,我们需要一个以上的view切换,实际上可以使用ArrayList<View> pageViews要保存view信息,然后切换 LayoutInflater infl ...

  3. WebSocket聊天室demo

    根据Socket异步聊天室修改成WebSocket聊天室 WebSocket特别的地方是 握手和消息内容的编码.解码(添加了ServerHelper协助处理) ServerHelper: using ...

  4. Hermes和开源Solr、ElasticSearch 不同

    Hermes和开源Solr.ElasticSearch不同          谈到Hermes的索引技术.相信非常多同学都会想到Solr.ElasticSearch.Solr.ElasticSearc ...

  5. POJ 2948 DP

    一个row*col的矩阵,每一个格子内有两种矿yeyenum和bloggium,而且知道它们在每一个格子内的数量是多少.最北边有bloggium的收集站,最西边有 yeyenum 的收集站.如今要在这 ...

  6. sar使用说明

     sar这东西,一开始还以为是内部有的,原来是外部的工具,可以到 http://pagesperso-orange.fr/sebastien.godard/download.html 去下载 1 安装 ...

  7. Java集合关于ArrayList

    ArrayList实现源码分析 2016-04-11 17:52 by 淮左, 207 阅读, 0 评论, 收藏, 编辑 本文将以以下几个问题来探讨ArrayList的源码实现1.ArrayList的 ...

  8. Hot Days Codeforces Round #132 (Div. 2) D(贪婪)

    Description The official capital and the cultural capital of Berland are connected by a single road ...

  9. Oracle历史记录

    请问如何查询ORACLE的历史操作记录!!!!!------解决方案-------------------- 有一个专门存储操作的数据库表..select t.SQL_TEXT, t.FIRST_LO ...

  10. Linux应用环境实战10:Bash脚本编程语言中的美学与哲学(转)

    阅读目录 一.一切皆是字符串 二.引用和元字符 三.字符串从哪里来.到哪里去 四.再加上一点点的定义,就可以推导出整个Bash脚本语言的语法了 五.输入输出重定向 六.Bash脚本语言的美学:大道至简 ...