社区
Android
帖子详情
Android提升之二 OOM解决方法
哎,真难
2015-03-10 02:53:47
加精
每个面试官都会问你是否遇到过OOM,什么情况会产生OOM,如何解决的,其实最好答题的方法就是举例,最好的例子就图片加载,那图片加载的典型案例就是imageloader。
那好,问题来了,大家如果不百度的情况下,是否能直接说出imageloader的运行原理,它是如何有效避免OOM的?
...全文
2069
37
打赏
收藏
Android提升之二 OOM解决方法
每个面试官都会问你是否遇到过OOM,什么情况会产生OOM,如何解决的,其实最好答题的方法就是举例,最好的例子就图片加载,那图片加载的典型案例就是imageloader。 那好,问题来了,大家如果不百度的情况下,是否能直接说出imageloader的运行原理,它是如何有效避免OOM的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
Android
Web3j
OOM
解决
详解
在
Android
客户端使用Web3j创建钱包、导入钱包时都可能会产生
OOM
,相关issue在Github上已经有所提及: ...创建钱包
OOM
解决
在创建钱包时,如果创建一个Full Wallet,则会导致
OOM
:
Wallet
OOM
:适用于
Android
客户端的Web3j
OOM
解决
方案
Android
Web3j
OOM
解决
在
Android
客户端使用Web3j创建钱包、导入钱包时都可能会产生
OOM
,相关issue在Github上已经有所提及: 。这个问题在Web3j 3.0版本以前是没有的,由于新版的Web3j使用spongycastle库替换了...
Android
实现图片缓存与异步加载
ImageManager2这个类具有异步从网络...
android
3.0之后软引用基本已经失效,因为虚拟机只要碰到软引用就回收,所以带不来任何性能的
提升
。 我这里的
解决
方案是HandlerThread(异步加载)+LruCache(内存缓存)+DiskLruCach
Android
内存优化之
OOM
Android
的内存优化是性能优化中很重要的一部分,而避免
OOM
又是内存优化中比较核心的一点。这是一篇关于内存优化中如何避免
OOM
的总结性概要文章,内容大多都是和
OOM
有关的实践总结概要。理解错误或是偏差的地方,还请...
Android
之批量加载图片
OOM
问题
解决
方案
Android
之批量加载图片
OOM
问题
解决
方案 一、
OOM
问题出现的场景和原因 一个好的app总少不了精美的图片,所以
Android
开发中图片的加载总是避免不了的,而在加载图片过程中,如果处理不当则...
Android
80,359
社区成员
91,290
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章