android报错及解决1--Bitmap加载时,报bitmap size exceeds VM budget

报错描述:

  用Bitmap加载图片资源时,报错java.lang.OutOfMemoryError: bitmap size exceeds VM budget

原因分析:

  android系统限制,只给图片分配8M内存,超过就蹦。图片虽然几十K,可能是压缩格式,转换成BitMap就是本来大小

解决办法:

  1、Android模拟器在设置时可以将Max VM application heap size值设大一点,我这里默认是16,改到60

    

  2、图形对象优化,这里要说的是Android上的Bitmap对象销毁,可以借助recycle()方法显示让GC回收一个Bitmap对象,

     通常对一个不 用的Bitmap可以使用下面的方式,如 

  

1 if(bitmapObject.isRecycled()==false) //如果没有回收  
2          bitmapObject.recycle();  

延伸学习:

  设置恰当的inSampleSize可以使BitmapFactory分配更少的空间以消除该错误,我们要将图片按照固定大小取缩略图,一般取缩略图的方法是使用      BitmapFactory的decodeFile方法,然后通过传递进去 BitmapFactory.Option类型的参数进行取缩略图,在Option中,属性值inSampleSize表示缩略图大小为原始图片大小的几分之一,即如果这个值为2,则取出的缩略图的宽和高都是原始图片的1/2,图片大小就为原始大小的1/4

1         BitmapFactory.Options opts =  new  BitmapFactory.Options();
2         opts.inSampleSize =  4 ;
3         Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);

  然而,如果我们想取固定大小的缩略图就比较困难了,比如,我们想将不同大小的图片去出来的缩略图高度都为200px,而且要保证图片不失真,那怎么办?我们总不能将原始图片加载到内存中再进行缩放处理吧,要知道在移动开发中,内存是相当宝贵的,而且一张100K的图片,加载完所占用的内存何止 100K?

  可以通过设置Options中有个属性inJustDecodeBounds来处理,如果该值设为true那么将不返回实际的bitmap不给其分配内存空间而里面只包括一些解码边界信息即图片大小信息,那么相应的方法也就出来了,通过设置inJustDecodeBounds为true,获取到outHeight(图片原始高度)和 outWidth(图片的原始宽度),然后计算一个inSampleSize(缩放值),然后就可以取图片了,这里要注意的是,inSampleSize 可能小于0,必须做判断。

 1 BitmapFactory.Options options = new BitmapFactory.Options();
 2         options.inJustDecodeBounds = true;
 3         // 获取这个图片的宽和高
 4         Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/test.jpg", options); //此时返回bm为空
 5         options.inJustDecodeBounds = false;
 6          //计算缩放比
 7         int be = (int)(options.outHeight / (float)200);
 8         if (be <= 0)
 9             be = 1;
10         options.inSampleSize = be;
11         //重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
12         bitmap=BitmapFactory.decodeFile("/sdcard/test.jpg",options);
13         int w = bitmap.getWidth();
14         int h = bitmap.getHeight();
15         System.out.println(w+"   "+h);
16         ImageView iv=new ImageView(this);
17         iv.setImageBitmap(bitmap);

这样我们就可以读取较大的图片而不会内存溢出了。

 

 

 

转载于:https://www.cnblogs.com/aiguozhe/p/3574595.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/408065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

react学习(67)--git 屏蔽文件不被追踪

bash # 屏蔽文件不被 git 追踪 git update-index --assume-unchanged [FILE]# 如果要还原的话&#xff0c;使用命令&#xff1a; git update-index --no-assume-unchanged [FILE]

华三1822-24路由交换机配置例子

华三1822-24路由交换机配置例子#sysname Quidway#super password level 3 cipher xxxxxxx#FTP server enable#web set-package force flash:/http.zip#radius scheme system#domain system #local-user dgbg_adminpassword cipher xxxxxxxservice-type telnet terminal#dhcp se…

什么是 AJAX, what is AJAX(一)

AJAX全稱為「Asynchronous JavaScript and XML」&#xff08;非同步JavaScript和XML&#xff09;&#xff0c;是一種創建互動式網頁應用的網頁開發技術。它使用&#xff1a; 使用XHTMLCSS來表示信息&#xff1b; 使用JavaScript操作DOM Document Object Model進行動態顯示及交互…

主角的创建与选择 Learn Unreal Engine (with C++)

主角创建有两种方式,本教程以SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 1. 新建游戏模式方式 新建一个蓝图类,选择游戏模式基础 在蓝图类的细节中将默认pawn类选择主角的蓝图类 在项目设置->地图和模式->默认模式->默认游戏模式 默认游…

单例模式的两种方法

public class MySingleton { private static object myLock new object(); private static volatile MySingleton mySingleton null; private MySingleton() { } public static MySingleton GetInstance() { if (mySingleton null) { //第一次检查 lock (myLock) { if (mySi…

SQL View 的使用语法与原则

1.View只是存储下来的sql 语句Views are nothing but saved SQL statements, and are sometimes referred as “Virtual Tables”. Keep in mind that Views cannot store data (except for Indexed Views); rather they only refer to data present in tables.2.create a vie…

What is AJAX?(转)(二)

关键词&#xff1a; ajax Asynchronous JavaScript Xml 目录 什么是AJAX&#xff1f; 第一步&#xff1a;如何发出一个HTTP请求 第二步&#xff1a;处理服务器的响应 第三步&#xff1a;一个简单的例子 第四步&#xf…

react学习(68)--ant design inputNumber

<InputNumber min{0} style{{ width: 100 }} onPressEnter{this.handleSearch} />

控制`Actor`朝向,运动 Learn Unreal Engine (with C++)

控制Actor的朝向,以及Actor的运动 SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 控制Actor朝向鼠标 设置鼠标在游戏中可见 获取玩家控制器鼠标可见设置为true PC Cast<APlayerController>(GetController()); PC->bShowMouseCursor true;获取…

zz 聊聊并发(一)

引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色&#xff0c;Volatile是轻量级的synchronized&#xff0c;它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时&#xff0c;另外一个线程能读到这个修改的值。 它在某…

小故事的蕴意1

①蛇与乌龟的故事   一条大蟒蛇和一条小毒蛇是朋友。   这天他们在路边发现了一只巨大的乌龟。   蛇兄弟想&#xff0c;这么大的个儿&#xff0c;可是一顿美餐啊。   蟒蛇说&#xff1a;我来对付他。   于是蟒蛇施展自己的绝技&#xff0c;用身体将大乌龟牢牢地缠住。…

.Net开发人员应该下载的十种必备工具(三)

NDoc 编写代码文档资料几乎总是一项令人畏惧的任务。我所说的不是早期设计文档&#xff0c;甚至也不是更为详细的设计文档&#xff1b;我说的是记录类上的各个方法和属性。NDoc 工具能够使用反射来分析程序集&#xff0c;并使用从 C# XML 注释生成的 XML 自动为代码生成文档资料…

react学习(69)--置空操作

//重置按钮handleReset () > {this.props.form.setFieldsValue({merchantCode: ,goodsCode: ,});};

Actor范围内随机生成 Learn Unreal Engine (with C++)

Actor范围内随机生成 Learn Unreal Engine (with C) SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) Actor范围内随机生成 新建box组件 SpawnArea CreateDefaultSubobject<UBoxComponent>(TEXT("SpawnArea"));RootComponent SpawnArea…

浏览器是如何展示网页的

作为一名前端工程师&#xff0c;我们应该清楚浏览器是如何展示网页的&#xff0c;了解浏览器的原理可以令设计者找到适合的途径把网页展示给用户。 首先&#xff0c;让我们来看看什么是浏览器。网页浏览器是显示网页服务器或档案系统内的文件&#xff0c;并让用户与这些文件互动…

.Net开发人员应该下载的十种必备工具(二)

NUnit NUnit 是为 .NET 框架生成的开放源代码单元测试框架。NUnit 使您可以用您喜欢的语言编写测试&#xff0c;从而测试应用程序的特定功能。当您首次编写代码时&#xff0c;单元测试是一种测试代码功能的很好方法&#xff0c;它还提供了一种对应用程序进行回归测试的方法。NU…

金山毒霸2007亮点介绍

盘点即将过去的2006年&#xff0c;计算机病毒多变种&#xff0c;恶意软件、流氓软件的泛滥&#xff0c;钓鱼欺诈网站的频繁出现&#xff0c;都给网民留下深刻印象。为在新的一年里对杀毒市场展开新一轮争夺&#xff0c;主流杀毒软件也纷纷发布了新一代产品。纵观各厂商提供的解…

子弹创建及发射 Learn Unreal Engine (with C++)

子弹创建及发射 Learn Unreal Engine (with C) SpaceshipBattle fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 子弹的创建 声明: UPROPERTY(EditAnywhere, Category "Fire")TSubclassOf<ABullet> Bullet;实现: //在空组件处生产子弹GetWorld()->…

爬虫工作量由小到大的思维转变---<第二十四章 Scrapy的`统计数据`收集stats collection>

前言: 前两篇是讲的数据诊断分析,还有一篇深挖解决内存泄漏的文章,目前我还没整理汇编出来;但是,想到分析问题的时候,忽然觉得爬虫的数据统计好像也挺重要;于是,心血来潮准备来插一篇这个------让大家对日常scrapy爬的数据,做到心里有数!不必自己去搅破脑汁捣腾日志,敲计算器了…

uva 10245 The Closest Pair Problem_枚举

题意&#xff1a;求任意两点之间的距离的最少一个距离 思路&#xff1a;枚举一下就可以了 #include <iostream> #include<cstdio> #include<cmath> using namespace std; #define N 10010 struct node{double x,y; }p[N]; int main(int argc, char** argv) {…