Picasso 内存泄露的大坑... 单实例... ><

2016-01-17 11:31:24 +08:00
 20015jjw

原来的帖子在这里: http://v2ex.com/t/241048

表示我终于找到问题所在了... 是 Picasso 的 instance... Ironically, 我为了更方便的管理缓存,每次建立新的 Adapter 的时候都会建立两个 Picasso instances... 发现的办法是我每次拉取数据之后压根不把他们放进 Adapter 里,就来回滑,结果几分钟之后提示文件打开过多... 估计就是 Picasso 的 fd 太多了... 现在使用了Picasso.setSingletonInstance(mPicasso)之后随便滚 hhh 根本没有问题 xDDDDD

真是巨坑... 不过沿途学习了 Fragment 的生命周期... 各种内存泄露检测插件... 各类内存泄露的方法... 也是不错的... 吧...

9366 次点击
所在节点    Android
8 条回复
EmarsXHY
2016-01-17 11:51:13 +08:00
卤煮应该做个总结
gzlock
2016-01-17 12:14:49 +08:00
onShow 时设个 flag=true , flag==true 时再加载图片?
fragment 我也不太会用,经常因为切换 fragment 后 view 被释放导致变 null 后再操作这个 view 就崩了,难道每处用 view 的地方都要判断是否为 null ?
20015jjw
2016-01-17 12:33:12 +08:00
@gzlock hmmm 我的 fragment 是个 recycleview ,所以每个 viewholder 里面就载图的时候叫 picasso.load , recycle 的时候 picasso.invalid; imageview.setResource(null) view 被释放的话还会 onCreateView 吧?那里再 inflate 一发就行?
txx
2016-01-17 12:37:44 +08:00
上个月发现了这个坑,然后已经投奔 fresco
gzlock
2016-01-17 12:44:30 +08:00
@20015jjw 跟你是一样的布局,但我没有用 viewpage ,只是普通的 FragmentManager.replace 替换 fragment

因为有网络数据读取回调填充数据到 view ,但肯定有用户不等读取完成就返回上一个 fragment 的,当前的在等回调的 fragment 有可能已经读取完准备填充 view 的就因为 view 被销毁了变成 null ,再填充数据就崩溃了
我在 fragment 的 ondestroyview 调用了 Butter knife 的 unbind
20015jjw
2016-01-17 12:49:18 +08:00
@gzlock 我也不是很清楚呢... 那就用个 if 或者 catch 一下?
20015jjw
2016-01-17 12:51:48 +08:00
@gzlock 我也不是很清楚呢... 那就用个 if 或者 catch 一下?
@txx ><
@EmarsXHY 还要总结啥 xD
greenskinmonster
2016-01-17 18:16:11 +08:00
用 glide 的,最后还是通过无脑强制回收内存来解决的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/251318

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX