文档章节

关于 android 加载 res 图片 out of memory 问题 解决 同样适用于 sd卡图片

SuShine
 SuShine
发布于 2015/06/25 15:28
字数 322
阅读 16
收藏 0

发现android 加载res图片如果过多也会崩溃 

android 也是使用 

   Bitmap  bm = BitmapFactory.decodeResourceStream(res, value, is, pad, opts);

来加载图片,不同他一般不会释放,如果图片太多就崩溃了


不过解决方法就更简单了,做个缓存,以后如果app 有很多图片还是要自己管理图片啊

这个类同样适用 sd卡的图片



package com.example.iqtest.util;

import java.io.InputStream;
import java.lang.ref.SoftReference;
import java.util.HashMap;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.ImageView;

public class BitmapManager {  
	  
    private static HashMap<String, SoftReference<Bitmap>> cache;   //如果是 int object的键值 对 应该是使用 SparseArray<E>的 但是这里考虑更多的还是加载sd卡的图片!
  
    static {  
        cache = new HashMap<String, SoftReference<Bitmap>>();  
    }  
    
  
    /**
     * 加载图片-可指定显示图片的高宽
     * @param path
     * @param imageView
     * @param width
     * @param height
     */
    public void loadBitmap(int resId, ImageView imageView , Context context) {  
        Bitmap bitmap = getBitmapFromCache(resId + "");  
   
        if (bitmap != null) { 
            imageView.setImageBitmap(bitmap);  
        } else {  
    		Bitmap bmp = getBitmap(resId , context);
        	imageView.setImageBitmap(bmp);
        }  
    }  
  
    /**
     * 从缓存中获取图片
     * @param path
     */
    private Bitmap getBitmapFromCache(String path) {  
    	Bitmap bitmap = null;
        if (cache.containsKey(path)) {  
            bitmap = cache.get(path).get();  
        }  
        return bitmap;  
    }  
    /*从res中加载图片*/
    private Bitmap getBitmap(int resId , Context context){
        Bitmap bitmap = null;
        BitmapFactory.Options opt = new BitmapFactory.Options();  
        opt.inPreferredConfig = Bitmap.Config.RGB_565;   
        opt.inPurgeable = true;  
        opt.inInputShareable = true;  
          //获取资源图片  
        InputStream is = context.getResources().openRawResource(resId);  
        bitmap =BitmapFactory.decodeStream(is,null,opt);  
        if (bitmap != null) {
            cache.put(resId + "", new SoftReference<Bitmap>(bitmap));
        }
        return bitmap;
    }
}


本文转载自:http://blog.csdn.net/sfshine/article/details/17362589

共有 人打赏支持
SuShine
粉丝 126
博文 563
码字总数 154303
作品 0
朝阳
后端工程师
私信 提问
start Android 内外存彻底研究

一部Android手机存在不同的存储空间类型。拿我的LG Optimus举例,他有512MB ROM和512MB RAM,还有一个SDHC的扩展槽,标配2G内存卡,最大可支持32G内存卡。那么这些数据都是什么意思呢? RAM ...

LiangX
2012/02/19
0
0
Android工具TraceView

一、TraceView 简介 TraceView 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot。TraceView 本身只是一个数据分析工具,而数据的采集则需要使用 ...

恰同学少年
2015/08/02
0
0
析:自定义适配器实现Grid View和Gallery碰到到问题。

在: http://www.oschina.net/code/snippet1512879426上学习grid view,不过做学习代码到过程中碰到一下问题: 1.运行起来之后,APP会异常结束; 2.copy数据到模拟终端到sdcard中; 问题1.运...

垂盆草
2012/08/18
0
0
finalBitmap 使用过程中。。没有网络获取不到SD卡图片的数据...

@michaely 你好,想跟你请教个问题: 我是通过json获取图片的信息...这个操作放在异步中...获取到数据通过List集合保存.....然后使用示例代码中的 fb=FinalBitmap.create(Photo_Album.this,E...

techstan
2013/03/25
2.2K
2
加载assets下APK文件 及快速加载插件APK里面的资源

Android 系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里。/res 和/assets的不同点是,android不为/assets下的文件生成ID。如果使用/assets下的文件,需要指定...

desaco
01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

图像库stb_image

https://github.com/nothings/stb 目前一般主流的图像格式也就是bmp,jpg,png,tga,dds,除了DDS一般是给DX用的,虽然一堆OpenGL程序也有用的,但是我一般只用png和tga, png不用说了,带a...

robslove
17分钟前
1
0
Spring 事务提交回滚源码解析

前言 在上篇文章 Spring 事务初始化源码分析 中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring 是如何去获取事务,当目标方法异常后,又是如何进行回滚的,又或是目标方法执行...

TSMYK
36分钟前
2
0
百度黄埔学院将培养一批首席AI架构师,为“国之重器”赋能

深度学习高端人才不仅是AI发展的重要养分,也是企业转型AI巨大推动力。2019年1月19日,百度黄埔学院——深度学习架构师培养计划在百度科技园举行开学典礼,深度学习技术及应用国家工程实验室...

深度学习之桨
今天
3
0
扒站wget仿站

wget -c -r -p -np -k http://xxx.com/xxx 其中: -c, --continue (断点续传) 接着下载没下载完的文件 -r, --recursive(递归) specify recursive download.(指定递归下载) -p, --page...

临江仙卜算子
今天
2
0
Nextjs+React非页面组件SSR渲染

@随风溜达的向日葵 Nextjs Nextjs是React生态中非常受欢迎的SSR(server side render——服务端渲染)框架,只需要几个步骤就可以搭建一个支持SSR的工程(_Nextjs_的快速搭建见Next.js入门)...

随风溜达的向日葵
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部