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. arcgis9.3 执行python文件

    1) 打开Python GUI 2) 选择菜单“File->Open”,打开你要执行的*.py文件 3) 选择菜单“Run->Run Module”,运行python文件 4)运行结果

  2. android webview 遇到的问题:external/chromium/net/disk_cache/stat_hub.cc:216:

    今天也遇到这个问题,界面显示无法访问,Baidu吧,结果有些含糊其词,有的说加网络权限,我看了下我的, 有个 <uses-permission android:name="androi ...

  3. 线上redis服务内存异常分析。

    项目中,新增了一个统计功能,用来统计不同手机型号的每天访问pv,看了下redis2.6有个setbit的功能,于是打算尝尝鲜把 redis从2.4更新到了2.6 因为是租了vps.服务器的内存只有4g ...

  4. Linux操作系统中,.zip、.tar、.tar.gz、.tar.bz2、.tar.xz、.jar、.7z等格式的压缩与解压

    zip格式 压缩: zip -r [目标文件名].zip [原文件/目录名] 解压: unzip [原文件名].zip 注:-r参数代表递归 tar格式(该格式仅仅打包,不压缩) 打包:tar -cv ...

  5. RHadoop教程翻译系列 _Mapreduce(1)_第一个Mapreduce任务

    如果单从概念上来说,Mapreduce和R中的函数lapply, tapply并无差别,它们都是把元素转化成列,然后计算索引(Mapreduce中的键),最后合并成一个定义好的组合.首先,让我们看一个 ...

  6. FlatBuffers要点

    FlatBuffers发布出来一周多,周末便抽时间先研究下它的使用方法.Flatbuffers的idl的语法主要参考[http://google.github.io/flatbuffers/md__s ...

  7. 30个有关Python的小技巧

    从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当 ...

  8. tableView 显示区域偏移

    在SB拖了一个tableView , 在显示的时候显示区域和tableView的区域不一致, (UITableViewWrapperView 和 UITableView frame不一致) 在SB上看 ...

  9. Transact-SQL

    Transact-SQL(又称T-SQL),是在Microsoft SQL Server和Sybase SQL Server上的ANSI SQL实现,与Oracle的PL/SQL性质相近(不只是实现A ...

  10. django部署到最后 主页上出现的坏请求解决办法

    ALLOWED_HOSTS = ['*'] 不然会出现400的坏请求 到此为止 环境总算配置完毕历时2天半重新熟悉了大量apache 和 linux下的命令