码迷,mamicode.com
首页 > 移动开发 > 详细

Android艺术——Bitmap高效加载和缓存(1)

时间:2017-08-27 17:12:15      阅读:360      评论:0      收藏:0      [点我收藏+]

标签:actor   内存占用   像素   图片   bitmap   图片压缩   图片大小   androi   oid   

通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是:

图片的同步加载;图片的异步加载;图片的压缩;内存缓存;磁盘缓存;网络获取;

 

1.加载

首先提到加载:BitmapFactory类提供了四类方法:decodeFiledecodeResourcedecodeStreamdecideByteArray。分别是文件系统、资源、输入流和字节数加载Bitmap对象。

 

2.压缩

如何进行图片的压缩?首先我们为什么图片压缩呢?因为很多时候ImageView尺寸小于图片原始尺寸,没必要把原始图片全部加载到内存,可能造成oom,并且ImageView也没办法全部显示原始图片,采样压缩将缩小后的图片在ImageView中显示,同时降低图片内存占用从而避免oom,提高Bitmap加载性能。图片内存太大会影响用户的体验,而且对设备存储也是浪费了资源。怎么压缩?通过BitmapFactory.Options来缩放图片,主要是inSampleSize参数,叫采样率。inSampleSize=1就是和原图一样inSampleSize=4,加载后的图片长和宽是原图片长和宽的1/4,像素数是原图片的1/16,加载后占用的内存也是原图片占用内存的1/16.

其中步骤是:

1BitmapFactory.OptionsinJustDecodeBound参数设为true并加载图片;

(2)BitmapFactory.Options中取出图片原始宽高信息,对应outWidthoutHeight

(3)结合目标view(imageView)所需图片大小,计算采样率;

(4)BitmapFactory.OptionsinJustDecodeBounds置为false,重新加载。

 

3.缓存

其中内存缓存与磁盘缓存是最为核心的,缓存就是为了移动端服务的,例如:有一大批的网络图片,需要下载后才能在用户界面上显示,如果是在PC端可以直接下载到本地进行显示,但是在移动端我们都是需要大量的流量进行下载,为了解决流量消耗的问题,缓存就是我们的不二之选,有了缓存我们从网络第一次网络加载之后,图片缓存在我们的设备之中,当我们再次查询图片的时候,就不用再次从网络上获取,而是先从设备的缓存上进行获取,如果没有,再考虑从网络上获取,这就是缓存策略。

目前我们常用的缓存算法是LRU算法,就是近期最少使用算法,核心就是如果缓存存满时候,有优先淘汰那些近期最少使用的缓存对象。说到LRU其中的两种缓存:LruCaheDisKLruCahe,前者是用于实现内存缓存,后者则是充当了储存设备的缓存。

 

这次我介绍了Bitmap 的加载与缓存,下次我们进一步的分析具体代码。

 

Android艺术——Bitmap高效加载和缓存(1)

标签:actor   内存占用   像素   图片   bitmap   图片压缩   图片大小   androi   oid   

原文地址:http://www.cnblogs.com/llw1996/p/7440550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!