V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
20015jjw
V2EX  ›  Android

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

  •  
  •   20015jjw · 2016-01-17 11:31:24 +08:00 · 6703 次点击
    这是一个创建于 3035 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    8 条回复    2016-01-17 18:16:11 +08:00
    EmarsXHY
        1
    EmarsXHY  
       2016-01-17 11:51:13 +08:00
    卤煮应该做个总结
    gzlock
        2
    gzlock  
       2016-01-17 12:14:49 +08:00 via Android
    onShow 时设个 flag=true , flag==true 时再加载图片?
    fragment 我也不太会用,经常因为切换 fragment 后 view 被释放导致变 null 后再操作这个 view 就崩了,难道每处用 view 的地方都要判断是否为 null ?
    20015jjw
        3
    20015jjw  
    OP
       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
        4
    txx  
       2016-01-17 12:37:44 +08:00 via iPhone
    上个月发现了这个坑,然后已经投奔 fresco
    gzlock
        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
    20015jjw
        6
    20015jjw  
    OP
       2016-01-17 12:49:18 +08:00
    @gzlock 我也不是很清楚呢... 那就用个 if 或者 catch 一下?
    20015jjw
        7
    20015jjw  
    OP
       2016-01-17 12:51:48 +08:00
    @gzlock 我也不是很清楚呢... 那就用个 if 或者 catch 一下?
    @txx ><
    @EmarsXHY 还要总结啥 xD
    greenskinmonster
        8
    greenskinmonster  
       2016-01-17 18:16:11 +08:00
    用 glide 的,最后还是通过无脑强制回收内存来解决的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2576 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:00 · PVG 00:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.