内存优化策略

引言


首页功能完成后在使用的时候偶尔会崩溃,log一看oom了。

仔细想想现在的布局结构确实会出现这样的问题

只首页这一个Fragment内的ViewPager就包含了21个子Fragment

其中每个子Fragment又包含了多个view每个view都有加载图片,如何形容可怕呢?

单发现Fragment的直接子view就有100个,接口返回的。且子view可能是ViewGroup又包了view。

android profiler显示内存超400M,图片占将近200M,内存优化亟待解决。

正文


先说一下原作:

之前有提到过首页ViewPager设置了近10个缓存(我只设置了3个),滑动内容时并没有卡顿和oom,图片的加载也很流畅。

有一个小细节引起了我的注意,当Fragment滑动到底部后在此滑到顶部时,图片的加载效果是渐显的。明显做了手脚,先标记一下,至于是什么暂时还没搞懂。

优化

1、Fragment
onCreateView每次会inflate一个View出来,多Fragment来回切换时inflate会更多

        if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragment_content, container, false)
        }

在每个Fragment内会存在多图,因此onDestroyView时清除内存占用

        Glide.get(context).clearMemory()
        System.gc()

2、ViewPager
设置ViewPager的缓存数量

        viewPager.offscreenPageLimit=3

3、图片格式
之前Glide操作的所有图片为ARGB_8888此种格式一像素会占用32位4字节。现在改为最小的RGB_565,这种格式占16位2字节,足足缩了一倍。

4、Glide
设置成只保存,修改后的图片

                    .diskCacheStrategy(DiskCacheStrategy.RESULT)

5、滑动时不加载图片
给RecyclerView设置滑动监听,当RecyclerView的状态为SCROLL_STATE_IDLE时加载图片

通过上述的操作图片占内存最高为130M且没有oom,总觉得还差了点什么,先标记这些以后再继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值