1 之前在网上看的自定义相册很多时候在低端机都会内存溢出开始上代码把 首先我们要拿到图片的所有路径

  cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // 大图URI
STORE_IMAGES, // 字段
null, // No where clause // 如果这个地方你想对图片的大小进行过滤 可以这样写String s = String.valueOf(1024*1024*4) MediaStore.Images.Media.SIZE+"<="+s
        null,         // No where clause
MediaStore.Images.Media.DATE_TAKEN + "DESC"); //根据时间排序
     int id = cursor.getInt(0);//大图ID
String path = cursor.getString(1);//大图路径
File file = new File(path);
//判断大图是否存在
if (file.exists()) {
String uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().
appendPath(Integer.toString(id)).build().toString();
这样就得到很多 content://media/external/images/media/119 这样的路径,没个file 类型的资源 如果是isfile 都会有一个这样的映射 2 拿到url 之后就是gridview 的适配了 你需要使用一个gridview,图片的加载我使用的是imageloader,你可以用跟好的框架 在baseadapter 里面加载图片的逻辑为
ImageSize size = new ImageSize(getImageWidth(),getImageWidth());  //  这个getimagewidth 就就你imageview 宽和高 这个加载出来的图片比系统图片的缩略图还要小些
imageLoader.loadImage(url, size, options,new SimpleImageLoadingListener(viewHolder.imageView));  //

3 然后选择用一个全局的 
LocalHelper.getInstance(getApplicationContext()).getCheckedItems();
来存储 你选择的图片 4 然后在返回的时候如何处理 ,就是要把你选择的图片放到你自己的缓存文件 然后size 这个我用是1280 960 标准4:3的图片 ,如果你加载原图 会oom
List<LocalHelper.LocalFile> localFiles = LocalHelper.getInstance(getApplicationContext()).getCheckedItems();
ImageSize size = new ImageSize(CameraConstant.DefaultWidth, 3 * CameraConstant.DefaultWidth / 4);
for (LocalHelper.LocalFile localFile : localFiles) {
final Uri uri =Uri.parse(localFile.getOriginalUri());
imageLoader.loadImage(uri.toString(),size, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
if (Util.isNotEmpty(url)){
BitmapUtils.saveBitmapTofile(bitmap, url);
toastHelper.cancel();
finish();
}else {
String path = BitmapUtils.getCacheDir(act);
BitmapUtils.saveBitmapTofile(bitmap, path);
result.add(path);
if (result.size()==LocalHelper.getInstance(getApplicationContext()).getCheckedItems().size()){
toastHelper.cancel();
finish();
}
}
}
@Override
public void onLoadingCancelled(String s, View view) {
}
});
}
文件路径算法是
public static File getPhotoFolder(Context context) {
File photoFolder = context.getExternalFilesDir("photos");
if (photoFolder == null) {
photoFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/dj/files/photos");
}
return photoFolder;
} 5 回到你显示界面 你把文件路径放到一个list里面 并且把会传到 你选择图片的activity里面
Intent intent = new Intent();
intent.putStringArrayListExtra("path", result);
setResult(RESULT_OK,intent); 6 到界面之后 只需要用gridview 加载一下图片就可以,图片点击在加一个预览效果就prefrect了 7 如果需要源码 请在下面留言啊 兄弟们, 我看看有空传到github上


 

android自定义相册 支持低端机不内存溢出的更多相关文章

  1. Android 自定义ScrollView 支持惯性滑动,惯性回弹效果。支持上拉加载更多

    先讲下原理: ScrollView的子View 主要分为3部分:head头部,滚动内容,fooder底部 我们实现惯性滑动,以及回弹,都是靠超过head或者fooder 就重新滚动到  ,内容的顶部或 ...

  2. Android 自定义ImageView支持缩放,拖拽,方便复用

    今天刚发了一篇关于ImageView的缩放和拖拽的博客,然后我想了下,将他自定义下,方便我们来复用这个imageView,效果我就不多说了,http://blog.csdn.net/xiaanming ...

  3. 【Android】Eclipse Memory Analyzer 进行堆内存溢出分析

    MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件.     不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, ...

  4. Java 内存溢出分析

    原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(metho ...

  5. 深入理解Java虚拟机之Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...

  6. 深入理解Java虚拟机之图解Java内存区域与内存溢出异常

    Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...

  7. 深入理解java虚拟机【内存溢出实例】

    通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...

  8. (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例

    通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...

  9. java虚拟机内存溢出各种场景总结

    java堆溢出 java堆用于存储对象实例,只要不断地创建对象,并且保证gc roots到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出. ...

随机推荐

  1. Javascript模块化编程(三):require.js的用法 (转)

    转自:http://my.oschina.net/u/1390066/blog/213769 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载 ...

  2. 【转】IOS --- OC与Swift混编

    群里大神发的网址,感觉有用就先收录了,暂时没时间看SWIFT,感觉代码简洁,但是可阅读性不是太高,有些代码让系统去判断类型,同样的,我们看代码的时候也得自己去判断类型,或许看多就习惯了,有时间再说吧, ...

  3. c# 修改appConfig文件节点

    配置文件对于程序的帮助是不可小视的,尤其是java工程师们,当然了,我这里说的是c#的配置文件.废话不多说了,直接上代码了,想必大家一看就会明白了 private string UpdateConfi ...

  4. php 实现 jsonp 数据接口

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  5. 嵌入式 hi3518平台检测网线是否插上

    /********************************** (C) COPYRIGHT ******************************* * File Name        ...

  6. border透明

    最近在写一表项目,需要边框透明,起初我以为没有办法实现,最近看一本书中找到办法,就是通过rgba实现,代码如下: border: 1px solid rgba(0, 0, 0, 0.7); 关于rgb ...

  7. latex公式中的空格如何表示

    两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m的宽度 大空格 a\ b 1/3m宽度 中等空格 a\;b 2/7m宽度 小空格 a\,b 1/6m宽度 ...

  8. linux库文件编写入门(笔记)

    linux库文件的编写 作者: laomai地址: http://blog.csdn.net/laomai 本文主要参考了如下资料⑴hcj写的"Linux静态/动态链接库的创建和使用&quo ...

  9. codejam环境熟悉—Minimum Scalar Product

    今天准备熟悉一下codejam的在线编程,为google的笔试做准备,因此按照codejam上对新手的建议,先用了一个简单的题目来弄清楚流程.记录一下需要注意的地方.   1.输入输出 输入输出重定位 ...

  10. Strider SSH Deploy配置

    登录需要ssh, ssh 免密码登录配置自行百度.shell里写成自己的需要的命令