文档章节

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

SuShine
 SuShine
发布于 2015/06/25 15:28
字数 322
阅读 16
收藏 0
点赞 0
评论 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
粉丝 119
博文 452
码字总数 126400
作品 0
青岛
后端工程师
Android工具TraceView

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

恰同学少年
2015/08/02
0
0
start Android 内外存彻底研究

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

LiangX
2012/02/19
0
0
析:自定义适配器实现Grid View和Gallery碰到到问题。

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

垂盆草
2012/08/18
0
0
系出名门Android(1) - 在 Windows 下搭建 Android 开发环境,以及 ...

系出名门Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序 作者:webabcd 介绍 搭建 Android 的开发环境,以及写⼀个简单的示例程序 在 Windows 下搭建 Android 开发...

庸人谷
2012/12/27
0
0
Android:内存控制及OOM处理

OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的)。所以,出现OOM不一定是Memory Leak。 同样,Mem...

Xushao
2013/05/07
0
1
Android应用如何实现换肤功能

转载请注明出处,商用请与本人联系。 本系列专题培训适用范围:初级Android程序员,即有J2SE基础和Android初级水平。J2SE基础是指掌握JAVA语法,1.5、1.6新增的语法不完全掌握也没关系。了解...

嘻哈开发者
2014/03/10
0
0
Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍

转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 大家好!差不多两个来月没有写文章了,前段时间也是在...

程序袁_绪龙
2015/08/05
0
0
总结的一些android公共库

最新最准确内容建议直接访问原文:Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类) 介绍总结的一些android公共库,包含缓存(图片缓存、预取缓存)、公共View(下拉...

Trinea
2012/07/16
0
1
Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅

转载请注明出处http://blog.csdn.net/xiaanming/article/details/9825113 异步加载图片的例子,网上也比较多,大部分用了HashMap<String, SoftReference<Drawable>> imageCache ,但是现在已......

JayPark不作死
2014/10/23
0
0
Android开发在路上:少去踩坑,多走捷径

近一朋友提了几个Android问题让我帮忙写个小分享,我觉得对新人还是挺有帮助的,所以有了这个小分享。 1.目前, Android APP开发完成后,通常需要在哪些机型上进行测试? 2.目前, 开发Andro...

zplswf
2014/08/07
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Call to undefined function Workerman\posix_getpid

workerman 在centos下报PHP Fatal error: Call to undefined function Workerman\posix_getpid posix在下面这个包中php-process...

dragon_tech
5分钟前
0
0
mysql 7.4 创建表 时  所建表 字段太多 导致失败

报错:[Err] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. 解决方法:把表的引......

qimh
7分钟前
0
0
语法补漏

1.if...elif...else... 代码示例: test=10 if test>9: print(1) elif test>8: print(2) elif test>7: print(3) else: print('nothing') 输出代码: 1...

十年磨一剑3344
8分钟前
0
0
Python -re模块及正则表达式解析

传送门: https://blog.csdn.net/pipisorry/article/details/25909899 ps:上面文章中"命名分组"的语法格式不能执行。正确的如下: (?P<name>正则表达式) #name是一个合法的标识符 除了使用别名...

一口今心
15分钟前
0
0
mybatis中session.getMapper方法源码分析

0开始代码AuthorMapper mapper = session.getMapper(AuthorMapper.class); 1 DefaultSqlSession类 @Override public <T> T getMapper(Class<T> type) { //最后会去调用MapperRegistry.getMap......

writeademo
23分钟前
1
0
spring cloud zuul网关的作用

zuul一般有两大作用,1是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块. zuul: ignored-services: '*' sensitiveHeaders: routes: ...

算法之名
24分钟前
9
0
java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
33分钟前
1
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
35分钟前
1
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
38分钟前
1
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部