图片引起的内存溢出,如何解决的

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wdx_1136346879/article/details/86654727

如何解决内存溢出:(内存为什么会溢出呢)
内存缓存, 速度快, 而且不消耗流量, 最优先读取内存缓存

  • 本地缓存, 速度较快, 也不消耗流量, 其次从本地读缓存
  • 网络缓存, 速度慢, 消耗流量, 最后才从网络下载
    一般是(80%)因为加载了很多图片,(20% 代码垃圾)
    可以用三级缓存的方式来解决;先是内存缓存(速度快, 而且不消耗流量,最优先读取内存缓存),
    再是本地缓存(速度较快, 也不消耗流量 其次从本地读缓存)
    最后是网络缓存(速度慢, 消耗流量, 最后才从网络下载)
    这样既能提高速度也能减少流量的使用
    关于这个内存缓存必须控制好,否则内存会溢出,(因为是把图片放在hashMap中,只进不出)
    而安卓虚拟()机只给每个安卓app应用分配16M,很容易溢出;
    所以在这边用一个谷歌(suppoutV4提供的)LurCache(),他可以将内存控制在一定的范围之内,
    一单超出之后就会自动的将对象移除掉;
    关于内存溢出,之前就遇到过这个问题,然后我写了一个HashMap直接(key,value)保存{当时就觉得有问题}
    就试运行,图片少还可以,图片多的话就很容易挂掉(肯定是HashMap太大了),然后在网上查怎么对象呗及时回收掉
    网上解释说hashMap里面的对象不被回收是因为都是强引用,肯定不会被回收。看到一个网友说可以用软引用和弱引用
    来回收对象,我就用软引用将hashMap包装了一下,效果不错!就在那边试试低版本还可以,发现在2.3版本后,老从本地去加载,
    不从内存中去取,感觉内存没起多大作用,然后就在网上找,在一片博客上看到,谷歌官方文档说建议在2.3版本后用LurCache
    解决内存溢出,然后我就用了LurCache感觉确实可以。然后我没事就看了一下LurCache源码(还好就几百行代码),看里面原理挺简单就封装了一个HashMap
    每次put和get的时候控制一下他的大小,不要超出,超出就删除,如果自己写的话估计也能!

android 内存优化
1.有限的堆内存,原始只有16M.现在貌似32M
2.内存大小消耗等根据设备,操作系统等级,屏幕尺寸的不同而不同
3.程序不能直接控制
4.支持后台多任务处理(multitasking)
5.运行在虚拟机之上
5R:
本文主要通过如下的5R方法来对ANDROID内存进行优化:
1.Reckon(计算)
首先需要知道你的app所消耗内存的情况,知己知彼才能百战不殆
2.Reduce(减少)消耗更少的资源
3.Reuse(重用)当第一次使用完以后,尽量给其他的使用
5.Recycle(回收)返回资源给生产流
4.Review(检查)回顾检查你的程序,看看设计或代码有什么不合理的地方。
Reduce :
Reduce的意思就是减少,直接减少内存的使用是最有效的优化方式。
图片显示:我们需要根据需求去加载图片的大小。
例如在列表中仅用于预览时加载缩略图(thumbnails )。
只有当用户点击具体条目想看详细信息的时候,这时另启动一个
fragment/activity/对话框等等,去显示整个图片

猜你喜欢

转载自blog.csdn.net/wdx_1136346879/article/details/86654727
今日推荐