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

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

将图片持久化到磁盘也不失为一种策略;但每次从文件读取图片也存在一定的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. UVA - 11388 GCD LCM

    II U C   ONLINE   C ON TEST  Problem D: GCD LCM Input: standard input Output: standard output The GC ...

  2. 搭建自己的XenServer+CloudStack云平台,提供IaaS服务(一)环境搭建

    目标 搭建一个完整的基于XenServer和CloudStack的虚拟化平台,提供IaaS服务. 搭建三台安装了XenServer的服务器 搭建一台安装了CloudStack的服务器用以管理云平台 搭 ...

  3. 2014 CSDN博文大赛终于获奖名单发布

    博文大赛第二阶段(2014年7月15日-2014年8月10日)已经结束,决赛获奖名单已在8月11日出炉. 现将获奖名单发布: 移动开发 NO.1    罗升阳    Luoshengyang    S ...

  4. 重温委托(delegate)和事件(event)

    1.delegate是什么 某种意义上来讲,你可以把delegate理解成C语言中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m,说白了就是可以把方法当作 ...

  5. Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

    Maven, Ivy, Grape, Gradle, Buildr, SBT, Leiningen, ant

  6. Redis设计与实现读书笔记——双链表

    前言 首先,贴一下参考链接: http://www.redisbook.com/en/latest/internal-datastruct/adlist.html, 另外真赞文章的作者,一个90后的小 ...

  7. Rational Rose的四种视图介绍

    Rose模型中有四种视图:Use Case View(用例视图),Logical View(逻辑视图),Component View(组建视图)和Deployment View(配置视图). 用例视图 ...

  8. hdu 4007 Dave (2011年大连ACM网络赛)

    题意:给定正方形的边长 r ,在平面内寻找正方形可以圈住的点的最大的个数. 分析:先对点排序,然后固定一条边,再平移另一条垂直边,得到点的个数,最后比较大小即可. 注意:不包含正方形倾斜的情况! // ...

  9. 李林APUE之进程的封装

    1.子进程是父进程的副本,获得父进程的数据空间/堆/栈,父子进程共享代码段.子进程从fork后開始运行.返回值=0表示子进程,由于子进程能够通过函数来获取父进程的ID,可是父进程无法知道子进程的ID. ...

  10. Socket编程实践(12) --UDP编程基础

    UDP特点 无连接,面向数据报(基于消息,不会粘包)的传输数据服务; 不可靠(可能会丢包, 乱序, 反复), 但因此普通情况下UDP更加高效; UDP客户/服务器模型 UDP-API使用 #inclu ...