- 浏览: 58955 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
java.lang.String:
好了,知道了!
垃圾收集器与内存分配策略 -
java.lang.String:
能说一下,什么是新生代,什么是老年代吗?
垃圾收集器与内存分配策略
因為Android本身的限制,在2.x版中使用 Bitmap 只要遇到稍大一點的圖,很容易就會遇到 out of memory 的狀況,在經過一陣搜尋之後,一直沒有很好的方法,有很多網站介紹的方法是把原圖 subsample,但對於圖片quality有要求的程式來說,這可是不被接受的解法,搞了半天,最後只好直接把 Android 的 source code 拿出來瞧瞧看看是否有什麼機會解決這個問題,突然發現原來這個問題竟然有個投機取巧的解決方法。
目前在網站上找到的結果,效果最有效的是使用
BitmapFactory.Options
將裏面的 inPurgeable 設定為 true,這樣可以讓java系統記憶體不足時先行回收部分的記憶體,這個方法其實已經解決大部分的問題了,不過生出來的記憶體還是算在java 的VM裏總是有些美中不足。
在看了source code 之後,我發現在BitmapFactory.Options裏竟然有一個inNativeAlloc的public變數,可以直接不把使用的記憶體算到VM裏,有趣的是這個變數是個隱藏版的變數,所以在正常的SDK文件中看不到,用eclipse時也不會提示你,也不能直接用,因此我用了一些小技巧將這個變數設成true,如此一來bitmap out of memory的問題發生的機率又更低了,以下就是目前的程式碼,有需要的人可以參考一下,不過不管怎麼樣,bitmap這東西,只要不用了,還是請儘量將它recycle,不然再多記憶體也是不夠用地~
public Bitmap decodeFile(String filePath) { Bitmap bitmap = null; BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true;try {BitmapFactory.Options.class.getField("inNativeAlloc").setBoolean(options,true);
} catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } if(mFilePath != null) { bitmap = BitmapFactory.decodeFile(mFilePath, options); } return bitmap; }
发表评论
-
Attacking memory problems on Android
2012-04-23 22:38 1408Attacking memory problems on ... -
ViewPager and Fragments
2012-03-25 20:11 2274Android: ViewPager and Fragm ... -
Genie Effect AS
2012-03-21 23:13 1032package { import flash.di ... -
Image Processing in Android
2012-03-13 23:44 0While working on WallSwitch, I ... -
How to avoid OutOfMemory Error / OOM (The Ugly Truth Revealed)
2012-03-13 23:38 856ERROR/dalvikvm-heap(4204): 6 ... -
Reduce Bitmap size using BitmapFactory.Options.inSampleSize
2012-03-13 23:32 1110In the post "Load ImageVie ... -
android BitmapFactory的OutOfMemoryError: bitmap size exceeds VM budget解决方案
2012-03-13 23:28 772使用android提供的BitmapFactory解码一 ... -
About Bitmap allocated
2012-03-13 23:08 1101Bitmap data is not allocated ... -
The Java Thread Pool
2012-03-03 00:55 1268A thread pool helps to const ... -
Multithreading For Performance
2012-03-02 23:23 946A good practice in creating ... -
Android Animations 3D flip
2012-03-02 23:24 1496In this post we are going to ... -
Dynamic ListView update
2012-02-19 16:39 0package com.huawei; impor ... -
SQLITE Best practice
2012-02-15 23:02 942Recently I’ve been doing qui ... -
Correct use of ConcurrentHashMap
2012-02-12 22:13 1251ConcurrentHashMap has been pitc ... -
NDK Findclass
2012-02-09 23:24 2922I’m a big fan of the new nat ... -
UPnP中Control Point的基本流程
2012-01-10 22:43 48571.搜索目前网络上的UPnP设备。Control Poi ... -
浅析UPNP协议
2012-01-10 22:13 2151摘要:文章介绍了UPnP结 ... -
DLNA OPEN SOURCE
2012-01-04 22:55 2356DLNA Open Source Projects ... -
Linux DLNA
2012-01-04 22:40 2815Linux DLNA 2011-08-22 黑日白月 ... -
Prof Android app dev: Creating User Interfaces
2011-12-08 19:22 0Introducing Views Android的所有可视 ...
相关推荐
android bitmap outofMemory 用来解决android中常见的bitmap outOfMemory
ANDROIDBITMAP内存限制OOM,OUTOFMEMORY.pdf
ANDROIDBITMAP内存限制OOM,OUTOFMEMORY[文].pdf
在Android开发中,我们经常与Bitmap打交道,而对Bitmap的不恰当的操作经常会导致OOM(Out of Memory)。这篇文章我们会介绍如何高效地在Android开发中使用Bitmap,在保证图片显示质量的前提下尽可能占用更小的内存。
Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常 1、高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状、不同的大小,但在大多数情况下,这些图片都会大于我们...
首先,OOM就是内存溢出,即Out Of Memory。也就是说内存占有量超过了VM所分配的最大。 怎么解决OOM,通常OOM都发生在需要用到大量内存的情况下(创建或解析Bitmap,分配特大的数组等),在这样的一种情况下,就可能...
Android Image Cache,use disccache,memory cache to limit the program's bitmap's memory,in case of OutOfMemory error!
方法将突破转成Bitmap时,遇到大一些的图片,我们经常会遇到OOM(Out Of Memory)的问题。怎么避免它呢? 这就用到了我们上面提到的BitmapFactory.Options这个类。 BitmapFactory.Options这个类,有一个字
将保存在本地的图片取出并缩小后显示在界面上、由于Bitmap内存占用较大,这里需要回收内存,否则会报out of memory异常、将处理过的图片显示在界面上,并保存到本地、使用ContentProvider通过URI获取原始图片、为...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
在Android应用里,最耗费内存的...而且在Android系统中,读取位图Bitmap时,分给虚拟机中的图片的堆栈大小只有8M,如果超出了,就会出现OutOfMemory异常。所以,对于图片的内存优化,是Android应用开发中比较重要的内容
关于android内存机制的介绍,以及bitmap的内存泄露等问题的处理方式
每个人在最初学习Android的时候肯定都会知道这么一个原因:我们编写的应用程序都是有一个最大内存限制,其中JAVA程序和C程序(NDK调用时)共享这一块内存大小,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常...
在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。...
我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发生的概率呢?之前我们一直在使用SoftReference软引用,SoftReference是一种现在已经不再推荐使用的方式,因为从 ...
需求:从本地相册找图片,或通过调用系统相机拍照得到图片。 容易出错的地方: 1、当我们指定了照片的uri路径,我们就不能通过data.getData();...就容易出现 out of memory(oom)错误,我们需要先把URI转换
大家应该知道,我们编写的应用程序都是有一定内存限制的,程序占用了过高的内存就容易出现OOM(OutOfMemory)异常。我们可以通过下面的代码看出每个应用程序最高可用内存是多少 int maxMemory = (int) (Runtime....
//An interpolator defines the rate of change of an animation. This allows the basic animation effects (alpha, scale, translate, rotate) to be accelerated, decelerated, repeated, etc. private ...
| OUT_OF_MEMORY | UNKNOWN ImageLoadingListener | | | - onLoadingStarted(String, View) | | - onLoadingFailed(String, View, FailReason) | | - onLoadingComplete(String, View, Bitmap) | | - ...