• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 使用软引用和弱引用防止内存溢出,引用防止内存溢出

使用软引用和弱引用防止内存溢出,引用防止内存溢出

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了防止溢出,如何防止缓冲区溢出,防止内存溢出,防止缓冲区溢出,css防止溢出等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

使用软引用和弱引用防止内存溢出,引用防止内存溢出


下面以使用软引用为例来详细说明。弱引用的使用方式与软引用是类似的。 假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到。如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低。所以我们考虑将图片缓存起来,需要的时候直接从内存中读取。但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常。这时,我们可以考虑使用软引用技术来避免这个问题发生。 首先定义一个HashMap,保存软引用对象。 private Map<String, SoftReference<Bitmap>> imageCache = new HashMap<String, SoftReference<Bitmap>>();   再来定义一个方法,保存Bitmap的软引用到HashMap。     public void addBitmapToCache(String path) {         // 强引用的Bitmap对象         Bitmap bitmap = BitmapFactory.decodeFile(path);         // 软引用的Bitmap对象         SoftReference<Bitmap> softBitmap = new SoftReference<Bitmap>(bitmap);         // 添加该对象到Map中使其缓存         imageCache.put(path, softBitmap);     }         获取的时候,可以通过SoftReference的get()方法得到Bitmap对象。     public Bitmap getBitmapByPath(String path) {         // 从缓存中取软引用的Bitmap对象         SoftReference<Bitmap> softBitmap = imageCache.get(path);         // 判断是否存在软引用         if (softBitmap == null) {             return null;         }         // 取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空         Bitmap bitmap = softBitmap.get();         return bitmap;     }   使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。 需要注意的是,在垃圾回收器对这个Java对象回收前,SoftReference类所提供的get方法会返回Java对象的强引用,一旦垃圾线程回收该Java对象之后,get方法将返回null。所以在获取软引用对象的代码中,一定要判断是否为null,以免出现NullPointerException异常导致应用崩溃。   经验分享: 到底什么时候使用软引用,什么时候使用弱引用呢? 个人认为,如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。 还有就是可以根据对象是否经常使用来判断。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。 另外,和弱引用功能类似的是WeakHashMap。WeakHashMap对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的回收,回收以后,其条目从映射中有效地移除。WeakHashMap使用ReferenceQueue实现的这种机制。
Map<String, SoftReference<Bitmap>> iconCache=new HashMap<String, SoftReference<Bitmap>>();
if (iconCache.containsKey(iconname)) {
SoftReference<Bitmap> softref = iconCache.get(iconname);
if (softref != null) {
   Bitmap bitmap = softref.get();
   if (bitmap != null) {
       iv_book.setImageBitmap(bitmap);
   } else {
       loadimage(iv_book, book, iconname);
   }

}

} else {
    loadimage(iv_book, book, iconname);
}



iconCache.put(iconname,new SoftReference<Bitmap>(bitmap));

  

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 使用软引用和弱引用防止内存溢出,引用防止内存溢出

相关文章

  • 2017-05-26Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现),relativelayout
  • 2017-05-26nginx使用let’s encrypt https证书并启用http2的使用记录
  • 2017-05-26WebView,androidwebview
  • 2017-05-26Kotlin的数据类:节省很多行代码(KAD 10),kotlin很多行
  • 2017-05-26Android中activity的启动模式,androidactivity
  • 2017-05-26Android零散,零散钟点工
  • 2017-05-26基于android-async-http的android服务,android-async-http
  • 2017-05-26Android如何使用Https
  • 2017-05-26一个帖子学会Android开发四大组件,android四大
  • 2017-05-228.3.5 Paint API之—— Xfermode与PorterDuff详解(二)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android Log,androidlog
    • Android6.0系统增加那些新特性
    • App更新之dialog数字进度条,appdialog进度条
    • GsonFormat插件从配置到使用,gsonformat插件配置
    • Android 五大布局,android五大布局
    • Android学习笔记-TextView(文本框)(一),android-textview
    • androidj基础:从网上下载图片,
    • 关于 android canvas 的简单总结
    • [android] 数据的异步加载和图片保存,
    • App引导界面,可以这么玩

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有