Android提升之二 OOM解决方法

哎,真难 2015-03-10 02:53:47
加精
每个面试官都会问你是否遇到过OOM,什么情况会产生OOM,如何解决的,其实最好答题的方法就是举例,最好的例子就图片加载,那图片加载的典型案例就是imageloader。
那好,问题来了,大家如果不百度的情况下,是否能直接说出imageloader的运行原理,它是如何有效避免OOM的?
...全文
2069 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
niekangshibendan 2015-05-11
  • 打赏
  • 举报
回复
以前被这个问题困扰半个多月最后用压缩的办法解决,最近都没接触到图片也很久没看到oom,不过看了下回答还是很有收获!
yung7086 2015-05-10
  • 打赏
  • 举报
回复
6楼回复的很对 ,图片在磁盘的大小比bitmap小得多,而bitmap的大小是由分辨率决定,所以图片oom第一步压缩分辨率。再压质量 压到你控件的大小,当然如果分辨率小就不要压缩了。我的代码从没写recyle,让他自己回收就是了只要你没有acrivity泄露 gc马上就回收了呀。因为手机的内存肯定支持手机分辨率的一张图片 那就不应该出现oom(有点夸张) 图片oom还有就是在适配器里面 这个就是属于适配器的优化 适当配合lrucatch+onlowmemory的那个升级版的方法忘记了。
最重要的还是activity泄露 这个java基础问题我也没弄懂只是尽量回避
ying05250 2015-03-20
  • 打赏
  • 举报
回复
简而言之,LRU算法,在内存满之前,从内存自动去掉使用频率最低的图片! 软引用,弱引用 已经不安全了
lassyou 2015-03-20
  • 打赏
  • 举报
回复
谢谢楼主分享!
lassyou 2015-03-20
  • 打赏
  • 举报
回复
谢谢楼主分享!
小东、、 2015-03-18
  • 打赏
  • 举报
回复
引用 4 楼 u011213712 的回复:
自定义回收机制。。。。采用软引用
设置临界点。。做判断,自动释放内存。。就是说我的最大内存10,我设置9的临界点,内存达到9后,就让所有内存释放。。
吉大利kituri 2015-03-16
  • 打赏
  • 举报
回复
http://blog.csdn.net/bateer2009/article/details/43954815
qq_26488323 2015-03-16
  • 打赏
  • 举报
回复
学习了,多看看论坛,懂了很多
qq_21529461 2015-03-15
  • 打赏
  • 举报
回复
看不懂????????
搞不懂现代人 2015-03-13
  • 打赏
  • 举报
回复
解决这种方法首先要理解系统内存的分配机制,做到有申请内存有释放,谁申请谁来释放;做Java研发的兄弟可能都忽略了这一点;把所有内存回收交给了垃圾回收器。可实际上你手动申请内存没有相应的释构方法释放对象,垃圾加收器是没办法回收的
budworm 2015-03-13
  • 打赏
  • 举报
回复
夜店大神,你觉得解决OOM有效方法有哪些?
dwj690385484 2015-03-13
  • 打赏
  • 举报
回复
第一次逛android论坛。。多多关照 我就从实际开发的角度来谈谈避免加载图片oom的情况: (1)首先最简单的就是尽量让美工在保证图片质量的情况下尽量提供小的图片 (2)在使用图片时也要根据实际情况,如果只是在100*100的view里面加载800*480的图片,肯定是不合适的。这时候就要用BitmapFactory来压缩图片,包括大小压缩和颜色质量压缩(inSimapleSize,Bitmap.Config.RGB_565)    //ARGB_8888 每个像素占用(8+8+8+8)/4 = 4字节    //RGB_565 每个像素占用(5+6+5)/4 = 2字节 (3)在用BitmapFactory生成图片时,尽量使用BitmapFactory.decodeStream方法。原因在于其直接调用JNI层的nativeDecodeAsset()来完成decode,无需在使用java层的createBitmap()生成临时bitmap,节约了内存。 (4)bitmap在确定不需要再次使用后请及时回收对象, 回收三部曲: 1.bitmap.recyle(); //解除bitmap引用与native位图的关系,并不会真正回收位图,只是告诉 2.bitmap = null; //将bitmap引用置空 3.System.gc(); //催促垃圾回收器尽快回收,但并不会真正调用回收。 下午有空可以讲下我学到的高效加载图片的流程。
阿良良木月火 2015-03-13
  • 打赏
  • 举报
回复
shenmgui>?
无亲提供 2015-03-13
  • 打赏
  • 举报
回复
已经学习了谢谢分享啊
山城忙碌人 2015-03-12
  • 打赏
  • 举报
回复
向你们学习。。。。。。
ynb1687 2015-03-12
  • 打赏
  • 举报
回复
感谢分享 学习学习
ameyume 2015-03-12
  • 打赏
  • 举报
回复
学习,没太注意过这方面的
RottenCode 2015-03-12
  • 打赏
  • 举报
回复
感谢分享 学习学习
sagittarius1988 2015-03-12
  • 打赏
  • 举报
回复
面试时这个还真的是必问的。 以前有修改定制过imageloader的源码,那时对这块还是很熟悉的,现在还真不好说了。 里面提供了很多缓存机制,软引用、Lrucache等;再限制缓存的大小;对图片的压缩;对view的复用
妖怪 2015-03-12
  • 打赏
  • 举报
回复
[/quote]分配heap堆这是非常好的一个方法,有没有考虑缓存了[/quote] 我觉得这个问题可以从几个方向去看 1.作为一个应用开发者,(仅能修改apk的代码和逻辑) 2.作为一个系统开发者,(深度定制android系统的角度) 3.作为项目的其他角色 (美工优化图片?编译配置管理员修改app heap大小?...) 怎么去解决这个OOM问题
加载更多回复(10)

80,359

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧