构建Android缓存模块】(二)Memory Cache & File Cache
2015-06-04 15:32
519 查看
转载自:/article/3483723.html
上节课我们讲到普通应用缓存Bitmap的实现分析,根据MVC的实现原理,我将这个简单的缓存实现单独写成一个模块,这样可以方便以后的使用,对于任意的需求,都属于一个可插拔式的功能。
之前提到,这个缓存模块主要有两个子部件:
Memory Cache:内存缓存的存取速度非常惊人,远远快于文件读取,如果没有内存限制,当然首选这种方式。遗憾的是我们有着16M的限制(当然大多数设备限制要高于Android官方说的这个数字),这也正是大Bitmap容易引起OOM的原因。Memory
Cache将使用WeakHashMap作为缓存的中枢,当程序内存告急时,它会主动清理部分弱引用(因此,当引用指向为null,我们必须转向硬盘缓存读取数据,如果硬盘也没有,那还是重新下载吧)。
能力越大,责任越大?人家只是跑得快了点儿,总得让人家休息,我们一定不希望让内存成为第一位跑完马拉松的Pheidippides,一次以后就挂了吧?作为精打细算的猿媛,我们只能将有限的内存分配给Memory
Cache,将更繁重的任务托付给任劳任怨的SDCard。
File Cache:硬盘读取速度当然不如内存,但是为了珍惜宝贵的流量,不让你的用户在月底没有流量时嚎叫着要删掉你开发的“流量杀手”,最好是避免重复下载。在第一次下载以后,将数据保存在本地即可。
文件读写的技术并不是很新颖的技术,Java Core那点儿就够你用了。不过要记得我们可是将Bitmap写入文件啊,怎么写入呢?不用着急,Android的Bitmap本身就具备将数据写入OutputStream的能力。我将这些额外的方法写在一个帮助类中:BitmapHelper
?
最后附上Memory Cache和File Cache的具体代码,非常简单。
?
?
没什么难的地方,直接贴代码。下节课我讲讲解如何使用异步任务下载数据,以及使用Controller操作Model,控制View的显示。
上节课我们讲到普通应用缓存Bitmap的实现分析,根据MVC的实现原理,我将这个简单的缓存实现单独写成一个模块,这样可以方便以后的使用,对于任意的需求,都属于一个可插拔式的功能。
之前提到,这个缓存模块主要有两个子部件:
Memory Cache:内存缓存的存取速度非常惊人,远远快于文件读取,如果没有内存限制,当然首选这种方式。遗憾的是我们有着16M的限制(当然大多数设备限制要高于Android官方说的这个数字),这也正是大Bitmap容易引起OOM的原因。Memory
Cache将使用WeakHashMap作为缓存的中枢,当程序内存告急时,它会主动清理部分弱引用(因此,当引用指向为null,我们必须转向硬盘缓存读取数据,如果硬盘也没有,那还是重新下载吧)。
能力越大,责任越大?人家只是跑得快了点儿,总得让人家休息,我们一定不希望让内存成为第一位跑完马拉松的Pheidippides,一次以后就挂了吧?作为精打细算的猿媛,我们只能将有限的内存分配给Memory
Cache,将更繁重的任务托付给任劳任怨的SDCard。
File Cache:硬盘读取速度当然不如内存,但是为了珍惜宝贵的流量,不让你的用户在月底没有流量时嚎叫着要删掉你开发的“流量杀手”,最好是避免重复下载。在第一次下载以后,将数据保存在本地即可。
文件读写的技术并不是很新颖的技术,Java Core那点儿就够你用了。不过要记得我们可是将Bitmap写入文件啊,怎么写入呢?不用着急,Android的Bitmap本身就具备将数据写入OutputStream的能力。我将这些额外的方法写在一个帮助类中:BitmapHelper
?
?
相关文章推荐
- Android开发把项目打包成apk
- Android开发之导入错误
- 【构建Android缓存模块】(一)吐槽与原理分析
- android 3G功能移植
- android布局也好,框架也好总之xml中控件中的name属性对应类时,貌似必须跟类名完全相同?
- RecyclerView 解析
- Android代码片段:验证数据
- 自定义View实现Android圆形进度条,支持自定义显示的样式
- Android ColorMatrix总结
- Android设计模式(六)--工厂方法模式
- Android DrawerLayout-侧滑菜单
- Android视频播放器--手势控制亮度、音量、缩放
- Android中自定义View的onMeasure以及MeasureSpec使用
- ListView 滚动条
- android下面使用SurfaceView+ mediaPlayer播放视频
- Android进步之十一:Json解析
- Android Context 上下文 你必须知道的一切
- android使用隐藏api的方法(使用被@hide的api)
- Google I/O 2015 为 Android 开发者带来了哪些福利?
- Android 强制隐藏软键盘