内存优化策略

引言


首页功能完成后在使用的时候偶尔会崩溃,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,总觉得还差了点什么,先标记这些以后再继续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,612评论 25 708
  • 父亲的脾气很不好,经常在家里对每一个人随口呵斥,或者,就算是不针对某一个人的时候,比如碗筷放错地方了的时候,他也会...
    七_911阅读 310评论 2 2
  • 他嘴里一口一个媳妇,情怀比起媳妇还是差的远,他终究是别人的小白,whatever,幸福就好
    二不愣登阅读 177评论 0 0