原来的帖子在这里: http://v2ex.com/t/241048
表示我终于找到问题所在了... 是 Picasso 的 instance... Ironically, 我为了更方便的管理缓存,每次建立新的 Adapter 的时候都会建立两个 Picasso instances... 发现的办法是我每次拉取数据之后压根不把他们放进 Adapter 里,就来回滑,结果几分钟之后提示文件打开过多... 估计就是 Picasso 的 fd 太多了... 现在使用了Picasso.setSingletonInstance(mPicasso)
之后随便滚 hhh 根本没有问题 xDDDDD
真是巨坑... 不过沿途学习了 Fragment 的生命周期... 各种内存泄露检测插件... 各类内存泄露的方法... 也是不错的... 吧...
1
EmarsXHY 2016-01-17 11:51:13 +08:00
卤煮应该做个总结
|
2
gzlock 2016-01-17 12:14:49 +08:00 via Android
onShow 时设个 flag=true , flag==true 时再加载图片?
fragment 我也不太会用,经常因为切换 fragment 后 view 被释放导致变 null 后再操作这个 view 就崩了,难道每处用 view 的地方都要判断是否为 null ? |
3
20015jjw OP @gzlock hmmm 我的 fragment 是个 recycleview ,所以每个 viewholder 里面就载图的时候叫 picasso.load , recycle 的时候 picasso.invalid; imageview.setResource(null) view 被释放的话还会 onCreateView 吧?那里再 inflate 一发就行?
|
4
txx 2016-01-17 12:37:44 +08:00 via iPhone
上个月发现了这个坑,然后已经投奔 fresco
|
5
gzlock 2016-01-17 12:44:30 +08:00 via Android
@20015jjw 跟你是一样的布局,但我没有用 viewpage ,只是普通的 FragmentManager.replace 替换 fragment
因为有网络数据读取回调填充数据到 view ,但肯定有用户不等读取完成就返回上一个 fragment 的,当前的在等回调的 fragment 有可能已经读取完准备填充 view 的就因为 view 被销毁了变成 null ,再填充数据就崩溃了 我在 fragment 的 ondestroyview 调用了 Butter knife 的 unbind |
7
20015jjw OP |
8
greenskinmonster 2016-01-17 18:16:11 +08:00
用 glide 的,最后还是通过无脑强制回收内存来解决的。
|