- 浏览: 249853 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (237)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (1)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
解决java.lang.OutOfMemoryError
当图片过大,或图片数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget,要想正常使用则需分配更少的内存,具体的解决办法是修改采样值BitmapFactory.Options.inSampleSize,例 如:
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inSampleSize = 4 ;
- Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
如何设置恰当的inSampleSize
设置恰当的inSampleSize是解决该问题的关键之一。BitmapFactory.Options提供了另一个成员inJustDecodeBounds。
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inJustDecodeBounds = true ;
- Bitmap bitmap = BitmapFactory.decodeFile(imageFile, opts);
设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。
查看Android源码,Android提供了一种动态计算的方法。
- public static int computeSampleSize(BitmapFactory.Options options,
- int minSideLength, int maxNumOfPixels) {
- int initialSize = computeInitialSampleSize(options, minSideLength,maxNumOfPixels);
- int roundedSize;
- if (initialSize <= 8 ) {
- roundedSize = 1 ;
- while (roundedSize < initialSize) {
- roundedSize <<= 1 ;
- }
- } else {
- roundedSize = (initialSize + 7 ) / 8 * 8 ;
- }
- return roundedSize;
- }
- private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) {
- double w = options.outWidth;
- double h = options.outHeight;
- int lowerBound = (maxNumOfPixels == - 1 ) ? 1 :
- (int ) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
- int upperBound = (minSideLength == - 1 ) ? 128 :
- (int ) Math.min(Math.floor(w / minSideLength),
- Math.floor(h / minSideLength));
- if (upperBound < lowerBound) {
- // return the larger one when there is no overlapping zone.
- return lowerBound;
- }
- if ((maxNumOfPixels == - 1 ) &&
- (minSideLength == -1 )) {
- return 1 ;
- } else if (minSideLength == - 1 ) {
- return lowerBound;
- } else {
- return upperBound;
- }
- }
使用该算法,就可动态计算出图片的inSampleSize。
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inJustDecodeBounds = true ;
- BitmapFactory.decodeFile(imageFile, opts);
- opts.inSampleSize = computeSampleSize(opts, -1 , 128 * 128 );
- opts.inJustDecodeBounds = false ;
- try {
- Bitmap bmp = BitmapFactory.decodeFile(imageFile, opts);
- imageView.setImageBitmap(bmp);
- } catch (OutOfMemoryError err) {
- }
另外,可以通过Bitmap.recycle()方法来释放位图所占的空间,当然前提是位图没有被使用。
发表评论
-
Android里的音量调节
2013-04-01 13:37 1362步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3525Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 724package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 904package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1133android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 961在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1643ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 1003Android 网络图片异步加载实例 ... -
android Text 删除线
2012-03-16 19:35 1195import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1543android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1468Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 847AsyncTask的使用 ... -
Android控件开发之Gallery3D效果
2012-03-13 14:38 2950Android控件开发之Gal ... -
android GridView
2012-03-08 10:28 932主类 import android.app.Activi ... -
ListView异步加载图片是非常实用的方法
2012-03-08 10:09 983ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1251首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 623Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1450AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 1015main.xml <?xml ver ... -
AutoCompleteTextView
2012-03-02 16:17 1084public class CityAdapter<T& ...
相关推荐
java.lang.OutOfMemoryError处理错误 java.lang.OutOfMemoryError是Java虚拟机(JVM)中的一种常见错误,...java.lang.OutOfMemoryError是Java虚拟机中的一种常见错误,解决这种错误需要根据实际情况进行分析和解决。
"Java.lang.OutOfMemoryError: Java heap space 解决方法" Java.lang.OutOfMemoryError: Java heap space 是 Java 中的一个常见错误,它发生时,Java 虚拟机 (JVM) 无法分配对象,因为堆空间不足。下面是解决该问题...
### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....
### Myeclipse下java.lang.OutOfMemoryError: Java heap space的解决方案 在使用Myeclipse进行Java开发时,可能会遇到`java.lang.OutOfMemoryError: Java heap space`这个错误提示。这种异常通常发生在应用程序占用...
Java中的`java.lang.OutOfMemoryError`是一种常见的运行时错误,通常表示应用程序在尝试分配内存时遇到了问题。根据提供的信息,这个错误主要涉及到两个方面:`PermGen space`和`Java heap`,并且与Tomcat服务器相关...
### 编译时出现java.lang.OutOfMemoryError Java heap space异常 ...通过上述方法的综合运用,通常能够有效地解决`java.lang.OutOfMemoryError: Java heap space`异常,确保项目的顺利编译和运行。
java.lang.OutOfMemoryError: PermGen space 解决方案
Java程序在运行过程中可能会遇到各种异常,其中"nested exception is java.lang.OutOfMemoryError: Java heap space"是一个常见的问题,通常发生在程序试图分配超过堆内存限制的空间时。这个错误表明Java虚拟机(JVM...
Eclipse 中通过 Tomcat 运行 J2EE 项目 java.lang.OutOfMemoryError PermGen space 的解决方案 在 Eclipse 中通过 Tomcat 运行 J2EE 项目时,可能会出现 java.lang.OutOfMemoryError: PermGen space 异常,这是由于...
总之,"java.lang.OutOfMemoryError: PermGen space"错误是由于Java虚拟机的 PermGen 区域内存不足造成的,可以通过增大 PermGen 区域的大小、升级JVM版本、优化类加载和库的使用等方式来解决。对于任何内存管理问题...
java.lang.OutOfMemoryError: Java heap space 解决方法
Java虚拟机(JVM)是Java应用程序的运行环境,它负责执行字节码并管理内存...通过上述方法,可以有效地预防和解决`java.lang.OutOfMemoryError: Java heap space`问题,优化JVM内存管理,提升应用程序的稳定性和性能。
### Java.lang.OutOfMemoryError: PermGen space 及其解决方法 #### 一、PermGen space 概述 在Java虚拟机(JVM)中,PermGen space(永久代)是用于存储类的信息、常量、静态变量等数据的区域。在Java 8之前,Perm...
总的来说,解决`java.lang.StackOverflowError`涉及理解Java的内存模型,尤其是线程栈的工作原理,以及适时调整JVM参数。同时,代码优化是预防这类问题的关键,确保递归的正确性,减少不必要的内存消耗,并充分利用...
Java中的“内存不足OOM (Out Of Memory):java.lang.OutOfMemoryError”是一个常见的运行时错误,它表示Java虚拟机(JVM)在尝试分配新的对象或数据结构时,发现系统内存不足以完成此操作。这个问题通常发生在程序...
通过上述步骤,可以有效地解决`java.lang.OutOfMemoryError: Java heap space`错误,确保Java应用程序稳定运行。 #### 五、总结 `java.lang.OutOfMemoryError: Java heap space`错误是Java开发者经常会遇到的一个...
"java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError" 是一个典型的错误提示,它表明在并发执行过程中遇到了内存不足的问题。下面我们将深入探讨这个问题的原因、影响以及如何解决。 内存溢出...