Android 通过软引用实现图片缓存,防止内存溢出
static private BitmapCache cache;
/** 用于Chche内容的存储 */
private Hashtable<Integer, MySoftRef> hashRefs;
/** 垃圾Reference的队列(所引用的对象已经被回收,则将该引用存入队列中) */
private ReferenceQueue<Bitmap> q;
/**
* 继承SoftReference,使得每一个实例都具有可识别的标识。
*/
private class MySoftRef extends SoftReference<Bitmap> {
private Integer _key = 0;
public MySoftRef(Bitmap bmp, ReferenceQueue<Bitmap> q, int key) {
super(bmp, q);
_key = key;
}
}
private BitmapCache() {
hashRefs = new Hashtable<Integer, MySoftRef>();
q = new ReferenceQueue<Bitmap>();
}
/**
* 取得缓存器实例
*/
public static BitmapCache getInstance() {
if (cache == null) {
cache = new BitmapCache();
}
return cache;
}
/**
* 以软引用的方式对一个Bitmap对象的实例进行引用并保存该引用
*/
private void addCacheBitmap(Bitmap bmp, Integer key) {
cleanCache();// 清除垃圾引用
MySoftRef ref = new MySoftRef(bmp, q, key);
hashRefs.put(key, ref);
}
/**
* 依据所指定的drawable下的图片资源ID号(可以根据自己的需要从网络或本地path下获取),重新获取相应Bitmap对象的实例
*/
public Bitmap getBitmap(int resId, Context context) {
Bitmap bmp = null;
// 缓存中是否有该Bitmap实例的软引用,如果有,从软引用中取得。
if (hashRefs.containsKey(resId)) {
MySoftRef ref = (MySoftRef) hashRefs.get(resId);
bmp = (Bitmap) ref.get();
}
// 如果没有软引用,或者从软引用中得到的实例是null,重新构建一个实例,
// 并保存对这个新建实例的软引用
if (bmp == null) {
// 传说decodeStream直接调用JNI>>nativeDecodeAsset()来完成decode,
// 无需再使用java层的createBitmap,从而节省了java层的空间。
bmp = BitmapFactory.decodeStream(context.getResources()
.openRawResource(resId));
this.addCacheBitmap(bmp, resId);
}
return bmp;
}
private void cleanCache() {
MySoftRef ref = null;
while ((ref = (MySoftRef) q.poll()) != null) {
hashRefs.remove(ref._key);
}
}
/**
* 清除Cache内的全部内容
*/
public void clearCache() {
cleanCache();
hashRefs.clear();
System.gc();
System.runFinalization();
}
}
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 785scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 445如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 644my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 896基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14301.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1010ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 936一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11131.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1287Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2099android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 732SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1099Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 961方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 635Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 604在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 968关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 734有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 780究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 763首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 892https://developers.google.com/ ...
相关推荐
NULL 博文链接:https://yulincqupt.iteye.com/blog/1683568
Android防止内存溢出浅析.zip
Android防止内存溢出浅析
android加载大图片的时候防止内存溢出的分析
android 图片下载 有效解决内存溢出问题 android 图片下载 有效解决内存溢出问题
Android有效解决加载大图片时内存溢出的问题
android加载大量图片内存溢出的三种解决办法
一个android小工程,里面有我自己写的一个工具类,可以轻松避免加载图片列表内存溢出,分享给需要的朋友,工程使用android 1.6SDK完成
分虽然多了点,但是项目...图片过大内存溢出:在图片读取是处理里图片,解决了溢出问题 项目下载后,直接导入就可以运行,是2.2的版本,有个插件android-async-http-1.4.4.jar,可能要配置下,还有服务器,端口是8080
Android 图片下载以及内存处理防止OOM内存溢出 源码
基于Android防止内存溢出浅析
防止内存溢出浅析
很久没上传资源了,今天特意把自己收集的,自己用过的资源上传。Android 异步加载网络的图片,开始的时候显示默认的,当加载完成图片后替换掉原来的默认图片,绝对不会发生内存溢出的问题。
android从相册里面选择某张图片或调用相机拍照后对图片剪切,不会内存溢出!!亲测的!!!剪切的时候内存溢出太坑爹了!!!图片剪切的demo网上不少,我下载的几个都有内存溢出,只好自己改改。并且7.0不会崩溃。...
android 显示大的gif图片 能解决内存溢出的问题 用jni实现
android 图片瀑布流优化版,可有效 防内存溢出。
基本上解决了OOM问题 如果 方便可以直接引用BitmapManager类到 项目中使用 解决blog 地址http://www.cnblogs.com/liongname/articles/2345087.html
内存溢出配置,内存溢出配置内存溢出配置内存溢出配置
易语言防止文件内存溢出源码,防止文件内存溢出,读入子程序
根据这个设计方案,做了详细的实现,经项目验证,Excel文件20W条数据不成问题,因为Excel解析是我自己原创的行级处理器,不会一次性生成很多对象,因此不存在内存溢出现象,只要excel文件放得下,有多少记录都没问题...