- 浏览: 1562943 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (673)
- Linux (3)
- android (302)
- php (12)
- struts2 (1)
- Flex积累 (88)
- Hibernate (8)
- MyEclipse (18)
- android备忘录 (209)
- Java备忘录 (53)
- spring (0)
- Flex备忘录 (30)
- JavaScript (10)
- Tomcat (11)
- Flex FrameWork (0)
- 设计模式学习 (4)
- 休闲娱乐 (4)
- Flex skin (1)
- Flex 组件 (2)
- 持久化相关 (2)
- DotNet相关 (5)
- Flex Style (1)
- Windows (11)
- Flex AIR (9)
- MySQL (1)
- mac OSX (29)
- eclipse (26)
- database (5)
- ARM (1)
- English (1)
- WebService (8)
- javabase64 (2)
- ruby (1)
- sqlite (5)
- ios (7)
- 无线应用 (1)
- Java (3)
- goagent (1)
- oc (1)
最新评论
-
Z_ying:
谢谢分享,上次也遇到过的,解决了,过了一段时间又忘记,幸亏看到 ...
FastJson 示例 及问题 -
wto8559:
这是什么错啊,我也遇到了.问下写一个servlet能解决什么问 ...
Exception in thread "HouseKeeper" java.lang.NullPointerException -
zxjlwt:
如何用php怎么弄了。http://surenpi.com
\U672a\U77e5\U9519\U8bef 字符还原 -
windseamless:
那怎么样才能屏蔽呢
java.lang.IllegalArgumentException: Window type can not be changed after the -
macleo:
Trinea 写道还是利用Fiddler抓包更方便,(1)无需 ...
android网络抓包相关
http://www.cdtarena.com/gpx/201210/5883.html
http://blog.csdn.net/a859522265/article/details/8012871
转一份,方便查阅,防止失效
大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候
就要用BitmapFactory.Options这个东东了,Options里主要有两个参数比较重要.
[java] view plaincopyprint?
options.inJustDecodeBounds = false/true;
//图片压缩比例.
options.inSampleSize = ssize;
我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以我们解析图片可以分为俩个步骤,第一步就是
获取图片的宽高,这里要设置Options.inJustDecodeBounds=true,这时候decode的bitmap为null,只是把图片的宽高放在Options里,然后第二步就是设置合适的压缩比例inSampleSize,这时候获得合适的Bitmap.这里我画了简单的流程图,如下:【成都IT培训】
为了让大家更容易理解,我这里做了一个简单的demo,主要功能就是一个界面里有个ImageView,点击ImageView的时候,进入本地相册,选择一个图片的时候,ImageView控件显示选择的图片。Demo的步骤如下:
第一步新建一个Android工程命名为ImageCacheDemo.目录结构如下:
第二步新建一个ImageCacheUtil.java工具类,代码如下:
第三步:修改ImageCacheDemoActivity.java代码如下:
其中main.xml布局代码如下:
第四步运行上述工程,效果如下:
从本地相册选择显示。用了getRsizedBitmap()方法,图片很大不会oom.
运用默认的decode方法就会oom。
OK,今天就讲到这里,大家有什么疑问的,可以留言,谢谢大家!!!
http://blog.csdn.net/a859522265/article/details/8012871
转一份,方便查阅,防止失效
大家好,今天给大家分享的是解决解析图片的出现oom的问题,我们可以用BitmapFactory这里的各种Decode方法,如果图片很小的话,不会出现oom,但是当图片很大的时候
就要用BitmapFactory.Options这个东东了,Options里主要有两个参数比较重要.
[java] view plaincopyprint?
options.inJustDecodeBounds = false/true;
//图片压缩比例.
options.inSampleSize = ssize;
我们去解析一个图片,如果太大,就会OOM,我们可以设置压缩比例inSampleSize,但是这个压缩比例设置多少就是个问题,所以我们解析图片可以分为俩个步骤,第一步就是
获取图片的宽高,这里要设置Options.inJustDecodeBounds=true,这时候decode的bitmap为null,只是把图片的宽高放在Options里,然后第二步就是设置合适的压缩比例inSampleSize,这时候获得合适的Bitmap.这里我画了简单的流程图,如下:【成都IT培训】
为了让大家更容易理解,我这里做了一个简单的demo,主要功能就是一个界面里有个ImageView,点击ImageView的时候,进入本地相册,选择一个图片的时候,ImageView控件显示选择的图片。Demo的步骤如下:
第一步新建一个Android工程命名为ImageCacheDemo.目录结构如下:
第二步新建一个ImageCacheUtil.java工具类,代码如下:
package com.tutor.oom; import java.io.InputStream; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.BitmapFactory.Options; import android.net.Uri; /** * @author frankiewei. * 工具类. */ public class ImageCacheUtil { /** * 获取合适的Bitmap平时获取Bitmap就用这个方法吧. * @param path 路径. * @param data byte[]数组. * @param context 上下文 * @param uri uri * @param target 模板宽或者高的大小. * @param width 是否是宽度 * @return */ public static Bitmap getResizedBitmap(String path, byte[] data, Context context,Uri uri, int target, boolean width) { Options options = null; if (target > 0) { Options info = new Options(); //这里设置true的时候,decode时候Bitmap返回的为空, //将图片宽高读取放在Options里. info.inJustDecodeBounds = false; decode(path, data, context,uri, info); int dim = info.outWidth; if (!width) dim = Math.max(dim, info.outHeight); int ssize = sampleSize(dim, target); options = new Options(); options.inSampleSize = ssize; } Bitmap bm = null; try { bm = decode(path, data, context,uri, options); } catch(Exception e){ e.printStackTrace(); } return bm; } /** * 解析Bitmap的公用方法. * @param path * @param data * @param context * @param uri * @param options * @return */ public static Bitmap decode(String path, byte[] data, Context context, Uri uri, BitmapFactory.Options options) { Bitmap result = null; if (path != null) { result = BitmapFactory.decodeFile(path, options); } else if (data != null) { result = BitmapFactory.decodeByteArray(data, 0, data.length, options); } else if (uri != null) { //uri不为空的时候context也不要为空. ContentResolver cr = context.getContentResolver(); InputStream inputStream = null; try { inputStream = cr.openInputStream(uri); result = BitmapFactory.decodeStream(inputStream, null, options); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } return result; } /** * 获取合适的sampleSize. * 这里就简单实现都是2的倍数啦. * @param width * @param target * @return */ private static int sampleSize(int width, int target){ int result = 1; for(int i = 0; i < 10; i++){ if(width < target * 2){ break; } width = width / 2; result = result * 2; } return result; } }
第三步:修改ImageCacheDemoActivity.java代码如下:
package com.tutor.oom; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; /** * @author frankiewei. * 解决图片普通OOM的Demo. */ public class ImageCacheDemoActivity extends Activity { /** * 显示图片的ImageView. */ private ImageView mImageView; /** * 打开本地相册的requestcode. */ public static final int OPEN_PHOTO_REQUESTCODE = 0x1; /** * 图片的target大小. */ private static final int target = 400; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } private void setupViews(){ mImageView = (ImageView)findViewById(R.id.imageview); mImageView.setOnClickListener(new OnClickListener() { public void onClick(View v) { openPhotos(); } }); } /** * 打开本地相册. */ private void openPhotos() { Intent intent = new Intent(Intent.ACTION_PICK, null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(intent, OPEN_PHOTO_REQUESTCODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case OPEN_PHOTO_REQUESTCODE: if(resultCode == RESULT_OK){ //如果用这个方法,Options为null时候,就是默认decode会出现oom哦. //Bitmap bm = ImageCacheUtil.decode(null, null, // ImageCacheDemoActivity.this, data.getData(), null); //这里调用这个方法就不会oom.屌丝们就用这个方法吧. Bitmap bm = ImageCacheUtil.getResizedBitmap(null, null, ImageCacheDemoActivity.this, data.getData(), target, false); mImageView.setImageBitmap(bm); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); } }
其中main.xml布局代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <ImageView android:id="@+id/imageview" android:layout_width="400px" android:layout_height="400px" android:src="@drawable/ic_launcher" /> </LinearLayout>
第四步运行上述工程,效果如下:
从本地相册选择显示。用了getRsizedBitmap()方法,图片很大不会oom.
运用默认的decode方法就会oom。
OK,今天就讲到这里,大家有什么疑问的,可以留言,谢谢大家!!!
发表评论
-
Axure 教程
2013-06-15 17:44 1205http://zhj6607.blog.163.com/blo ... -
再次android 下的Caused by: java.lang.ClassNotFoundException:
2013-06-05 11:34 2365莫名其妙发生了:Caused by: java.lang.Cl ... -
android RatingBar 收集
2013-05-29 09:50 986RatingBar例子: http://www.eoeandr ... -
java 发送邮件
2013-05-28 16:17 870http://www.blogjava.net/wangfun ... -
ExecutorService 建立多线程的步骤
2013-05-26 22:18 882http://huangxiaojian9999.blog.1 ... -
android include报错解决一例
2013-05-24 13:48 1195一个layout 嵌入另外一个layout < ... -
.net 接口报错解决一例
2013-05-24 13:44 950NullReferenceException: 未将对象引用设 ... -
Overlay移动收集
2013-05-19 17:04 9081.http://changyy.pixnet.net/blo ... -
模拟器 INSTALL_FAILED_CONTAINER_ERROR
2013-05-10 00:21 1568用模拟器跑,总是报这个错。 找了一下,发现是androidma ... -
百度地图总结
2013-05-02 11:34 10701.mMapView.regMapViewListener(a ... -
baidu 2.1.1sdk 貌似有问题
2013-05-02 11:32 9ItemOverlay 哪里去了? -
EditText SetError 4.0下 不显示文字解决
2013-04-24 16:46 2044http://www.eoeandroid.com/forum ... -
短信验证
2013-04-23 15:27 939解决方案如下: http://www.eoeandroid.c ... -
根据两个经纬度计算两地距离
2013-04-23 14:56 1672com.baidu.mapapi.utils.Distance ... -
百度地图 android 线路
2013-04-22 23:39 2489最好的资料莫过于它自己提供的了 -2.管理自己的key htt ... -
android 屏幕方向总结
2013-04-17 15:23 985http://dev.wo.com.cn/docportal/ ... -
分享总结
2013-04-15 17:28 8461。http://www.umeng.com/componen ... -
sqlitemanager
2013-03-31 23:56 1069http://blog.csdn.net/jjhua/arti ... -
android adb 无法启动
2013-03-31 23:33 1567症状: adb 有运行 但是,eclipse debug模式无 ... -
android 字体样式
2013-03-20 13:17 1120http://tank03.iteye.com/blog/13 ...
相关推荐
"博客资源:ViewPager加载大量图片oom解决方案demo" 这个标题表明了这是一个关于解决在Android应用中使用ViewPager展示大量图片时出现内存溢出(Out Of Memory,简称OOM)问题的实例教程。ViewPager是Android SDK中...
在Android客户端使用Web3j创建钱包、导入钱包时都可能会产生OOM,相关issue在Github上已经有所提及: ...创建钱包OOM解决 在创建钱包时,如果创建一个Full Wallet,则会导致OOM:
"图片异步加载插件"正是一款为解决这个问题而设计的工具,它能够有效地优化内存管理,提高用户体验。这款插件的名字是Android-Universal-Image-Loader,其主要功能和特性包括: 1. **异步加载**:Android-Universal...
Android Web3j OOM解决在Android客户端使用Web3j创建钱包、导入钱包时都可能会产生OOM,相关issue在Github上已经有所提及: 。这个问题在Web3j 3.0版本以前是没有的,由于新版的Web3j使用spongycastle库替换了...
解决Bitmap OOM问题的方法多种多样: 1. **适当缩放**:在加载图片时,先计算出适合屏幕大小的尺寸,然后对图片进行等比例缩放。这样可以显著减少内存占用。可以使用`BitmapFactory.Options`的`inSampleSize`参数来...
以下将详细探讨图片OOM的问题以及解决方法。 1. **问题分析**: - **图片加载机制**:Android系统在加载图片时,会将图片解码为Bitmap对象,而Bitmap占用的内存与图片的宽度、高度和颜色深度有关。高分辨率图片在...
OOM 9种常见原因及解决方案 以下是OOM 9种常见原因及解决方案的知识点: 1. Java Heap Space 错误 * 原因分析:请求创建一个超大对象、超出预期的访问量/数据量、过度使用终结器、内存泄漏 * 解决方案:通过 -Xmx...
基本上解决了OOM问题 如果 方便可以直接引用BitmapManager类到 项目中使用 解决blog 地址http://www.cnblogs.com/liongname/articles/2345087.html
问题原因分析:使用ScriptEngine.eval每次都会对脚本进行编译,生成一个新的类,被GroovyClassLoader加载,大量执行计算后,将导致被加载的类数量不断增加,最终OOM。 解决办法:对计算的表达式expression进行预...
本文将深入探讨如何解决`ViewPager`加载成百上千高清大图导致的OOM问题。 首先,我们需要理解`OOM`产生的原因。当应用程序在内存中分配的内存超过系统所能提供的限制时,就会触发`OOM`。在Android中,每个应用都有...
为了解决这个问题,我们需要掌握一些有效的策略来优化图片加载,防止OOM的发生。以下是一些关键知识点: 1. **图片大小与分辨率**:理解图片的像素大小和分辨率至关重要。高分辨率的图片会占用更多内存,因此,尽量...
Android 加载大图片 OOM 异常解决方案 在 Android 开发中,加载大图片是一个常见的问题,这可能会引发 OOM(Out of Memory)异常。OOM 异常是指应用程序试图分配超过系统可用内存的内存空间,从而导致应用程序崩溃...
本文将深入探讨如何解决帧动画引发的OOM问题,以及如何确保动画流畅运行。 首先,理解帧动画的工作原理至关重要。在Android中,帧动画是通过`AnimationDrawable`类实现的,它将一系列的图片资源(如PNG或JPEG格式)...
本篇将详细介绍如何解决Android中加载GIF导致的OOM问题。 首先,理解Android内存管理机制是解决问题的关键。Android系统为每个应用分配一定的内存预算,当应用超过这个预算时,就会抛出OOM异常。对于大内存消耗的...
综上所述,解决GridView中的OOM问题主要依赖于有效的内存管理和图片加载策略。通过使用LruCache进行图片缓存,配合合适的图片尺寸调整,以及合理的多图下载策略,可以显著减少内存消耗,提高应用性能,从而避免出现...
本篇文章主要探讨Spark面对OOM问题的解决方法及优化策略。 首先,我们需要了解Spark的内存模型。Spark的Executor内存分为三个部分:Execution内存、Storage内存和其他内存。Execution内存主要用于执行任务,如join...
OOM全称”Out Of Memory”,即内存溢出。 内存溢出已经是软件开发历史上存在了近40年的“老大难”问题。在操作系统上运行各种软件时,软件所需申请的内存远远超出了物理内存所承受的大小,就叫内存溢出。 内存溢出...
在运行几次循环之后,就会报错OOM。 解决方法是在每个代码后面接clear_session()函数,显示的关闭TFGraph,再重启。 详情参考 https://keras.io/backend/#backend-functions。 from keras import backend as K K....
本文将详细探讨如何通过自定义相册来实现多选照片功能,并针对OOM问题提出解决方案。 首先,自定义相册的实现通常需要以下几个关键步骤: 1. **获取系统相册中的图片**:可以使用ContentResolver查询MediaStore中...