android bitmap 防止 内存溢出

参考:http://blog.csdn.net/huangbiao86/article/details/8072128

1.读取图片用BitmapFactory.decodeStream() 和BitmapFactorty.decodeFile() 避免用BitmapFactory.decodeResource ,前两个函数调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。

注意: 通过查看源代码 发现 BitmapFactory.decodeResource最终也调用 nativeDecodeAsset()

2.优化Dalvik虚拟机的堆内存分配

在程序onCreate时就可以调用

private final static floatTARGET_HEAP_UTILIZATION = 0.75f; VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。

private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;

VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理

3.options设置图片尺寸   options.inSampleSize

private ImageView preview;
private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg";
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一
Bitmap b = BitmapFactory.decodeFile(fileName, options);
preview.setImageBitmap(b);
filePath.setText(fileName);
时间: 2024-12-10 12:01:41

android bitmap 防止 内存溢出的相关文章

android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题

android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题 android createbitmap函数内存溢出,求解怎样进行处理out of memory溢出问题 android createbitmap函数内存溢出.求解怎样进行处理out of memory溢出问题 局部核心代码: bitmap = Bitmap.createBitmap(mSize.x, mSize.y, Config.ARGB_8888); cacheBitmap = Bit

android createbitmap函数内存溢出,求解如何进行处理out of memory溢出问题

android createbitmap函数内存溢出,求解如何进行处理out of memory溢出问题 android createbitmap函数内存溢出,求解如何进行处理out of memory溢出问题 android createbitmap函数内存溢出,求解如何进行处理out of memory溢出问题 局部核心代码: bitmap = Bitmap.createBitmap(mSize.x, mSize.y, Config.ARGB_8888); cacheBitmap = Bit

Android中ImageView内存溢出

在使用ImageView加载图片时候,会报内存溢出错误: 操作过程:在应用中调用了相册,将uri加载到imageview中后,当再次进行同样操作就出现如上异常. 原因:读取完资源后没有对资源进行回收,而android中图片操作内存有限制,所以当再次调用就会溢出. 解决方法: 在activity中先创建对象: private Bitmap bitmap; 具体方法如下: protected void onActivityResult(int requestCode, int resultCode,

Android 基础学习--内存溢出和泄漏

过几天又要去面试了,所以整理一下知识点,以前知道,但是都没仔细想,可能在面试的时候答不全,如果各位觉得除了我总结的之外还有其它情况可以留言,谢谢! 一  什么是内存泄漏?怎么解决? 内存泄漏也称作“存储渗漏”,就是在内存中创建对象开辟的空间,在使用完毕后没有释放,或者无法释放,结果导致该空间一直没有释放.直到程序结束.即所谓内存泄漏. 我总结了以下,内存泄漏的原因:不再有用的对象被其他依然有用的对象所引用是导致内存泄漏的主要原因. 1 查询SQlite数据库后,游标没有关闭. 2 ListVie

Android图片处理内存溢出学习

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存. 因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset(

Android Bitmap占用内存计算公式

Android对各分辨率的定义 当图片以格式ARGB_8888存储时的计算方式 占用内存=图片长*图片宽*4字节 图片长 = 图片原始长 (设备DPI/文件夹DPI)  图片宽 = 图片原始宽(设备DPI/文件夹DPI) 举例验证如下: 图片大小 200 * 320,设备为红米dpi为320,属于xhdpi设备. 验证一 图片放在hdpi,下面为代码输出结果: DD/MainActivity(13014): dpi: 320    bitmap ByteCount: 456036 图片长 = (

Android Handler防止内存溢出的写法

时间:2016年4月20日14:21:49 static class MyHandler extends Handler { private WeakReference<Context> weakReference; public MyHandler(Context context) { weakReference = new WeakReference<>(context); } @Override public void handleMessage(Message msg) {

android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决

1.相关代码: 加入权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> /** 获取SD卡路径 **/ private static String getSDPath() { St

android 防止bitmap 内存溢出

在android开发过程中经常会处理网络图片发送内存溢出,那么怎么解决这种问题? 思路: 下载到本地 通过网络获取和文件下载存放到手机中目录 代码: // 获取网络 public InputStream GetHttpInfo(String urString, String fun, String parm) throws Exception { HttpURLConnection connection = (HttpURLConnection) new URL(urString) .openC