Bitmap的加载和Cache

前提:由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,导致加载Bitmap的时候很容易出现内存溢出。

下面这个一场信息在开发中应该市场遇到:

java.lang.OutofMemoryError: bitmap size exceeds VM budget

Android实际开发中经常需要用Bitmap做缓存,通过换粗策略,我们不需要每次都从网络上请求图片或者从存储设备中加载图片,这样就极大地提高了图片的加载效率以及产品的用户体验。

目前比较常用的缓存策略是LruCache和DiskLruCache,其中LruCache常被用做内存缓存,而DiskLruCache常被用做存储缓存。

时间: 2024-12-29 12:40:55

Bitmap的加载和Cache的相关文章

Android 基础 十二 Bitmap的加载和Cache

本章的主题是Bitmap的加载和Cache,主要包含三个方面的内容.首先讲述如何有效地加载一个Bitmap,这是一个很有意义的话题,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这导致Bitmap加载的时候很容易出现内存溢出.下面这个异常信息在开发中应该经常遇到: 因此如何高效的加载Bitmap是一个很重要也很容易被开发者或忽视的问题. 接着介绍Android中常用的缓存策略,缓存策略是一种通用的思想,可以用在很多场景中,但是实际开发中经常需要用Bitmap

Bitmap 的加载和 Cache

Android 中如何高效地加载 Bitmap 是一个很重要也很容易被我们忽视的问题. Bitmap 的高效加载 BitmapFactory 类提供了:decodeFile.decodeResource.decodeStream.decodeByteArray 以及 decodeFileDescriptor 等几类方法来加载一个 Bitmap 对象. 高效加载 Bitmap 的核心思想就是设置 BitmapFactory.Options 的 inSampleSize 采样率属性来加载所需尺寸的图

Bitmap的加载与Cache(一)

如何有效的加载一个bitmap,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这就导致加载Bitmap的时候很容易出现内存溢出. 因此,如何高效的加载bitmap是一个很重要也很容易被开发者忽略的问题. Bitmap的高效加载: 如何加载一张图片呢?BitmapFactory类提供了四类方法:decodedFile,decodedResource,decodedStream和decodedByteArray,分别用于支持文件系统,资源,输入流以及字节数组中加

第12章 Bitmap的加载和Cache

高效加载 BitmapFactory类提供四种方法: decodeFile:从文件,间接调用decodeStream decodeResource:从资源,间接调用decodeStream decodeStream:输入流 decodeByteArray:字节数组中 使用BitmapFactory.options按一定采样率来加载缩小后图片来避免OOM. public class ImageResizer { private static final String TAG = "ImageRes

Android艺术——Bitmap高效加载和缓存代码分析(2)

Bitmap的加载与缓存代码分析: 图片的压缩 比如有一张1024*768像素的图像要被载入内存,然而最终你要用到的图片大小其实只有128*96,那么我们会浪费很大一部分内存,这显然是没有必要的,下面是一个实例: public static int calculateInSampleSize(              BitmapFactory.Options options, int reqWidth, int reqHeight) {      // Raw height and widt

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

通过Bitmap我们可以设计一个ImageLoader,实现应该具有的功能是: 图片的同步加载:图片的异步加载:图片的压缩:内存缓存:磁盘缓存:网络获取: 1.加载 首先提到加载:BitmapFactory类提供了四类方法:decodeFile.decodeResource.decodeStream和decideByteArray.分别是文件系统.资源.输入流和字节数加载Bitmap对象. 2.压缩 如何进行图片的压缩?首先我们为什么图片压缩呢?因为很多时候ImageView尺寸小于图片原始尺寸

使用iFrame动态加载Application Cache

为了避免缓存主页面,一般使用动态iFrame的方式来加载Application Cache,方法如下: 1 updateImageCache: function () { 2 3 if (null == $("iframe")) { 4 5 } else { 6 $("iframe").remove(); 7 } 8 9 var iframe = document.createElement('iframe'); 10 iframe.setAttribute('wi

关于Bitmap的加载(一)

Android中的Bitmap的加载,为了更好的用户体验,有非常多的奇巧淫技.要达到的目的是,一边加载一边看,不卡屏.图片根据布局大小显示.如果图片大了,要合理的缩小,防止内存溢出. 于是,我把Android training的讲解记录下来. 首先,是单一图片的加载. 单一图片,加载最首要的问题是判断图片的大小.如果图片过大,我们需要对图片进行一定比例的压缩. 先通过图片本身的宽高和要求的宽高,计算图片的缩放比例. public static int calculateInSampleSize(

关于Bitmap的加载(二)

接上节,上节记录了Bitmap的加载,用上节的方法,我们可以方便地压缩图片,进行加载. 然而,有时候,当出来大量的图片或者是一张大图要加载时,这一过程所花的时间就会显得很长.甚至长到用户可以感觉出来,即UI的卡顿.因此,我们需要一个方法让图片自己加载去吧,不能干扰用户的操作.所以,我们需要用一个新的线程来完成图片加载的操作.其中最简单便捷的方法,就是Use an AsyncTask. 首先创建一个AsyncTask的子类: class BitmapWorkerTask extends Async