美文网首页
Android避免OOM之使用软引用

Android避免OOM之使用软引用

作者: 苏未_ | 来源:发表于2017-08-23 11:17 被阅读0次

在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用和弱引用技术。

软/弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。利用这个队列可以得知被回收的软/弱引用的对象列表,从而为缓冲器清除已失效的软/弱引用。

假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到。如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低。所以我们考虑将图片缓存起来,需要的时候直接从内存中读取。但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常。这时,我们可以考虑使用软/弱引用技术来避免这个问题发生。以下就是高速缓冲器的雏形:

首先定义一个HashMap,保存软引用对象。

private Map <String, SoftReference<Bitmap>> imageCache = new HashMap <String, SoftReference<Bitmap>> ();
方法.jpg

使用软引用以后,在OutOfMemory异常发生之前,这些缓存的图片资源的内存空间可以被释放掉的,从而避免内存达到上限,避免Crash发生。

如果只是想避免OutOfMemory异常的发生,则可以使用软引用。如果对于应用的性能更在意,想尽快回收一些占用内存比较大的对象,则可以使用弱引用。

另外可以根据对象是否经常使用来判断选择软引用还是弱引用。如果该对象可能会经常使用的,就尽量用软引用。如果该对象不被使用的可能性更大些,就可以用弱引用。

摘抄处

相关文章

  • Android避免OOM之使用软引用

    在Android应用的开发中,为了防止内存溢出,在处理一些占用内存大而且声明周期较长的对象时候,可以尽量应用软引用...

  • 日常浏览优秀技术贴集锦! updating !

    Java 如何有效地避免OOM:善于利用软引用和弱引用 https://www.cnblogs.com/dolph...

  • Android开发优化之的强引用、软引用、弱引用的使用

    Android开发优化之的强引用、软引用、弱引用的使用 Anderson大码渣[https://www.jians...

  • Android内存溢出

    如何避免OOM 1. 图片过大导致OOM(解决方法) 方法1: 等比例缩小图片方法2:对图片采用软引用,及时地进行...

  • 【android】Android内存优化之OOM

    Android内存优化之OOM Android的内存优化是性能优化中很重要的一部分,而避免OOM又是内存优化中比较...

  • 14、 Java的四种引用,强弱软虚

    Java的四种引用,强弱软虚 强引用 强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不...

  • 2017面试题总结

    一、如何避免OOM异常 解决方法: 方法 1: 等比例缩小图片 方法 2:对图片采用软引用,及时地进行 recyl...

  • 掌阅安卓面试题

    Android 硬件加速:硬件加速 Android 事件分发:事件分发 强引用,软引用,弱引用,虚引用:强引用,软...

  • 虚拟机

    垃圾回收采用可达性分析算法。强引用 new软引用 SoftReference OOM之前会被回收 展...

  • 引用的四种分类

    强引用(Strong Reference):JVM宁愿抛出OOM,也不会让GC回收的对象 软引用(Soft Ref...

网友评论

      本文标题:Android避免OOM之使用软引用

      本文链接:https://www.haomeiwen.com/subject/obrddxtx.html