Android Bitmap OutOfMemory 解决办法

Android Bitmap OutOfMemory 解决办法

置顶 2014年07月01日 14:41:22 阅读数:3072 标签: OutOfMemoryBitmapandroid图片优化更多

个人分类: 异常问题和解决办法

      在Android应用里,最耗费内存的就是图片资源。而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常

E/AndroidRuntime(  697): java.lang.OutOfMemoryError
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
E/AndroidRuntime(  697):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)
E/AndroidRuntime(  697):     at com.example.imagetoshow2.ImageAdapter.createReflectedImages(ImageAdapter.java:66)
E/AndroidRuntime(  697):     at com.example.imagetoshow2.ImageAdapter.getView(ImageAdapter.java:54)
E/AndroidRuntime(  697):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)

解决办法:

1.及时回收内存

 
  1. if(bitmap != null && !bitmap.isRecycled()){

  2. // 回收并且置为null

  3. bitmap.recycle();

  4. bitmap = null;

  5. }

  6. System.gc();

在适当的地方使用上述代码,将暂时不需使用的的回收掉,当然system.gc不应该频繁调用,否则会使系统效率降低。

 

 

2.使用BitmapFactory.Options对图片进行压缩

 

 
  1. BitmapFactory.Options opts = new BitmapFactory.Options();

  2. opts.inSampleSize = n;

  3.  
  4. bitmap = BitmapFactory.decodeStream(fis, null, opts);


使用inSampleSize设置放缩比例,默认值为0,设置一个大于0的数便可对图片进行压缩。

 

 

 
  1. BitmapFactory.Options opts = new BitmapFactory.Options();

  2.  
  3. // 设置inJustDecodeBounds为true

  4.  
  5. opts.inJustDecodeBounds = true;

  6.  
  7. // 使用decodeFile方法得到图片的宽和高

  8.  
  9. BitmapFactory.decodeFile(path, opts);


使inJustDecodeBounds为true后,再使用decodeFile()等方法,并不会真正的分配空间,即解码出来的Bitmap为null,只会计算出options.outWidth和options.outHeight值,在下次使用BitmapFactory的decodeFile()等方法实例化Bitmap对象前,将opts.inJustDecodeBound设置回false就可以得到图片了。

 

3.代码优化

为了避免应用在分配Bitmap内存的时候出现OutOfMemory异常停止运行,通常,在实例化Bitmap的代码中,对OutOfMemory异常进行捕获

 
  1. <span style="font-size:18px;"> <span style="font-size:18px;">Bitmap bitmap = null;

  2. try {

  3. // 实例化Bitmap

  4. bitmap = BitmapFactory.decodeFile(path);

  5. } catch (OutOfMemoryError e) {

  6. //

  7. }</span></span>

然后在Catch部分做一些内存回收操作,或者是使用缓存图片等...

总是良好的编程风格和优质的代码结构是程序员的无上追求....

 

 

https://blog.csdn.net/tangnengwu/article/details/36185361

https://blog.csdn.net/zhuwentao2150/article/details/52097344

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

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

相关文章

为什么光标停在表格中间_word里面为什么打出来的数字中间为啥差一个光标的距离 - 卡饭网...

为Word宏添加VBA项目的数字证书签名为Word宏添加VBA项目的数字证书签名 用户在使用Word编辑文档时可以借助Word宏命令提高工作效率。在默认情况下&#xff0c;Word宏的安全性设置为“高”&#xff0c;当运行Word宏命令时会自动禁用宏。如果将Word宏安全性设置为“中”&#xff…

Java8学习笔记(1) -- 从函数式接口说起

转载自 Java8学习笔记&#xff08;1&#xff09; -- 从函数式接口说起希望本文能够成为Java8 Lambda表达式的快速入门指南。 函数式接口 理解Functional Interface&#xff08;函数式接口&#xff0c;以下简称FI&#xff09;是学习Java8 Lambda表达式的关键所在&#xff0c;所…

.Net Aop(静态织入)框架 BSF.Aop

BSF.Aop .Net 免费开源&#xff0c;静态Aop织入&#xff08;直接修改IL中间语言&#xff09;框架&#xff0c;类似PostSharp(收费)&#xff1b;实现前后Aop切面和INotifyPropertyChanged注入方式。 开源地址: https://git.oschina.net/chejiangyi/BSF.Aop 开源QQ群: .net 开源基…

C#7.0中有哪些新特性?

以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布&#xff0c;这些特性中的大部分将活跃起来。现在是时候来展示这些特性&#xff0c;你也告诉借此告诉我们你的想法&#xff01; C&#xff03;7.0 增加了许多新功能&#xff0c;并…

java8的函数指针

转载自 java8的函数指针这段时间 项目实在是太紧了&#xff0c;没有时间写博客啊。java模式的文章还没有写完&#xff0c;后期在写吧。 最近项目中大量的使用到了远程调用以及回调。是采用反射的方式实现的。担心到大量的反射会影响到程序运行的效率问题。 所以决定放弃使用反…

新闻发布项目——接口类(newsTbDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.newsTb;/*** 新闻的接口类* author Administrator**/ public interface newsTbDao {//查询public List<newsTb>getnewsTbAll();//添加public int addNewsTb(newsTb news);//修改public i…

nbiot开发需要掌握什么_学习软件开发需要准备什么?

2020年&#xff0c;随着Internet的不断发展&#xff0c;现在Internet已经融入到每个人的生活中&#xff0c;所以在计算机行业的发展中&#xff0c;软件开发技术就显得非常重要&#xff0c;因为它是与我们的生活息息相关的&#xff0c;选择许多人想学习Java软件开发技术&#xf…

面试项目 java-服务端 18h58

以淘宝为例子介绍一下 这个架构非常之复杂&#xff0c;创业公司无法达到这样的架构&#xff0c;在当前阶段找到适合的架构 用户名唯一 横向越权 纵向越权 ftp服务器 mybatis mybatis反向工程 mybatis pageHelper 所有的东西在一个服务器上面 三台服务器单独做一个东…

Google高性能RPC框架gRPC 1.0.0发布

鉴于gRPC已进入稳定版分支&#xff0c;并对应用于生产中准备就绪&#xff0c;Google发布了gRPC 1.0。 gRPC源于被称为Stubby的Google内部项目&#xff0c;早期是用于一些Google内部服务间的通信。18个月前Google开源了gRPC框架&#xff0c;希望借此gRPC能被更广泛地采纳&#x…

java打开文件(Windows exe,应用文件exe,以及其他任何格式的文件)

转载自 java打开文件&#xff08;Windows exe,应用文件exe,以及其他任何格式的文件&#xff09; 使用java代码打开任何格式的文件 public static void main(String[] args) throws IOException { openWindowsExe(); openExe(); openFile(); } //用 Java 调用win…

新闻发布项目——接口类(commentDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.comment;/*** 新闻评论的接口* author Administrator**/ public interface commentDao {//查询public List<comment>getCommentAll();//根据id查询新闻信息public List<comment> g…

delphi7存取配置文件与sqlserver数据库连接_SQL Server基础知识概念要点详细讲解

SQL Server基础知识概念要点详细讲解目录基础概念1、网状模型数据库2、层次模型数据库3、关系模型数据库知识点实例总结基础概念SQL语言中&#xff0c;between and表示包括两边参数。%取余&#xff0c;/取商模式&#xff1a;在数据库三级模式结构中&#xff0c;对数据库中全部的…

.Net Core 中的包、元包与框架(Packages, Metapackages and Frameworks)

包&#xff0c;元包与框架 本文翻译自 Packages, Metapackages and Frameworks。 .Net Core 是一种由 NuGet 包组成的平台。一些产品体验受益于代码包的细粒度定义&#xff0c;而另一些受益于粗粒度的定义&#xff0c;这两种定义都是有用的&#xff0c;不能绝对地说哪个好与不好…

面试项目 java-服务端2 18h58

idea2017对mybatis plugin支持不是很好 标准的meaven项目用谁都一样 archetype是官网提供的模板项目 .gitignore文件非常的重要配置 Meven的pom文件 项目的包结构 Mybatis三剑客

Java剪切板操作大全

转载自 Java剪切板操作大全1. 概述提起剪切板&#xff0c;一般都是在桌面系统或工具中使用。目前&#xff0c;操作Java剪切板有两种形式&#xff0c;这也对应着两种不同的技术Swing和JavaFX。而剪切板有可以分为系统剪切板和自定义剪切板。顾名思义&#xff0c;系统剪切板可以…

君威u0073故障码解决_顽疾修复过程,君威没倒挡的变速箱故障就是这样修好

君威没倒挡的变速箱故障表现&#xff1a;开了18万公里的君威有没有倒挡的故障发生。每当这时&#xff0c;要重新启动能恢复。但是&#xff0c;出现的没倒挡的次数逐渐增多。没检查出故障码。顽疾修复过程&#xff0c;君威没倒挡的变速箱故障就是这样修好&#xff1a;检查君威变…

idea创建标准的meaven项目

若没有jdk 则这样配置 就是下拉框默认没有jdk1.7 初始化完成了

新闻发布项目——接口类(categoryTBDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.categoryTB;/*** 新闻类别的接口* author Administrator**/ public interface categoryTBDao {//查询所有的类别public List<categoryTB> getCategoryTBAll();//添加新闻类别public int …

controller属于哪一层_别急着换5G,4G手机同样值得考虑!哪几款安卓手机称得上4G机皇?...

今年已经进入了5G手机大战&#xff0c;目前有不少厂商都推出了自家的5G旗舰。虽说5G是以后的主流&#xff0c;但目前入手5G手机还为时尚早&#xff0c;毕竟距离5G全面普及还有至少2年时间&#xff0c;5G的套餐费用也高出许多。当前一些4G旗舰机型价格下降幅度不小&#xff0c;马…

基于.NET SingalR,LayIM2.0实现的web聊天室

LayIM官网 http://www.layui.com/doc/layim.html 博客教程&#xff1a;http://www.cnblogs.com/panzi/p/5767095.html 项目说明&#xff1a;基于.NET SingalR,LayIM2.0实现的web聊天室&#xff0c;功能如下&#xff1a; 注册登录 好友聊天&#xff0c;发送图片、文件 群组聊天&…