内存优化策略

引言


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

猜你喜欢

转载自blog.csdn.net/s1991721/article/details/79275060