移动应用开发(IOS/android等一下)在一般图像缓存方案评述(附流程图)
在移动应用开发。我们经常从网络请求到该设备显示遇到的场景图片。
假设多次发动每个请求,废物流、浪费电。;
将图片持久化到磁盘也不失为一种策略;但每次从文件读取图片也存在一定的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等一下)在一般图像缓存方案评述(附流程图)的更多相关文章
- Xamarin体验:使用C#开发iOS/Android应用
		
Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发. 简介 Xamarin是基于Mo ...
 - 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案
		
微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...
 - 移动开发iOS&Android对比学习--异步处理
		
在移动开发里很多时候需要用到异步处理.Android的主线程如果等待超过一定时间的时候直接出现ANR(对不熟悉Android的朋友这里需要解释一下什么叫ANR.ANR就是Application Not ...
 - VS2015安装开发ios android
		
前几天很火,装了一下,结果是不是太满意,装了VS2015只是多了一个android和ios的模版,最终还是要装xamarin ,最后装了个xamarin ,然后破解 破解地址:http://www.c ...
 - Android进阶图片处理之三级缓存方案
		
图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...
 - 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案
		
文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案 介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...
 - javascript开发 ios和android app的简单介绍
		
先看几个名词解释: nodejs ionic,Cordova,phoneGap,anjularjs react-native,reactjs nodeJs 的介绍参见这里,写的很好http://www ...
 - [Hadoop 周边] 浅谈大数据(hadoop)和移动开发(Android、IOS)开发前景【转】
		
原文链接:http://www.d1net.com/bigdata/news/345893.html 先简单的做个自我介绍,我是云6期的,黑马相比其它培训机构的好偶就不在这里说,想比大家都比我清楚: ...
 - 职业定位(移动端、ios开发、Android开发)
		
移动端 移动端webapp开发必备知识:http://www.chinaz.com/manage/2012/1128/283974.shtml 设计一款好的移动App,有哪些基本规则?http://w ...
 
随机推荐
- spring Annotation 组分注塑
			
spring 注意分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识为 ...
 - python语言学习6——python基础
			
Python是一种计算机编程语言. 以#开头的语句是注释,注释是给人看的,可以是任意内容 其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块. Python程序是大小写敏感的,如果写错 ...
 - SE 2014年5月23日
			
两站点 A 和 B,由于业务往来需要,所以工程师提出vpn技术,同时需要保证业务流在internet上的安全性,同时在这里站点均为固定ip地址. 通过分析以上信息,确定这里使用 IPSec VPN的主 ...
 - Spring 类构造器初始化实例
			
构造方法类Bean1 package com.hao947.bean; public class Bean1 { public Bean1() { System.out.println("b ...
 - Android学习十九:ContentProvider初步
			
一.Content Provider基本概念 1.ContentProvider为存储和获取数据提供了统一的接口.ContentProvide对数据进行封装.不用关心数据存储的细节.使用表的形式来组织 ...
 - Linux系统部署规范v1.0
			
Linux系统部署规范v1.0 目的: 1.尽可能减少线上操作: 2.尽可能实现自动化部署: 3.尽可能减少安装服务和启动的服务: 4.尽可能使用安全协议提供服务: 5.尽可能让业务系统单一: 6.尽 ...
 - java名词,关键字
			
抽象类:规定一个或多个抽象方法的类别本身必须定义为abstract,抽象类只是用来派生子类,而不能用它来创建对象. final类:又称“最终类”,它只能用来创建对象,而不能被继承,与抽象类刚好相反,而 ...
 - 基于MVC3下拉列表联动(JQuery)
			
上次项目中遇到一个需要多个下拉列表联动的操作,今天有空将实现方式整理以便以后参考. 要达到的效果是,点击一个下拉框,则另一个下拉框的值发生对应变化.如:选择中国,则另个一下拉框里显示中国各个省份. 传 ...
 - HUNNU11354:Is the Name of This Problem
			
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11354&courseid=0 Problem des ...
 - 深入理解java虚拟机系列(一):java内存区域与内存溢出异常
			
文章主要是阅读<深入理解java虚拟机:JVM高级特性与最佳实践>第二章:Java内存区域与内存溢出异常 的一些笔记以及概括. 好了開始.假设有什么错误或者遗漏,欢迎指出. 一.概述 先上 ...