这段时间在做项目的时候,为了更好的用户体验,在 https://github.com/wasabeef/awesome-android-ui 用了一些现成的控件。其实有些控件本身是有 Bug 的,不过还好有 eclipse memory analyzer(MAT) 的帮助,解决这些现在控件的 Bug 不是太困难的事情。
关于 MAT 的基本概念,如有时间再写一篇文章详述。这里用一个分析实例来记录下如何利用它来找到 Bug。就以 AndroidImageSlider 为例吧,它也是个开源控件,能实现图片轮播,而且还有各种特效。其地址为 https://github.com/daimajia/AndroidImageSlider。
笔者在刚开始使用 ImageSlider 的时候甚为高兴,太方便了,而且很酷。但是它也给笔者带来了个问题:内存泄露,在反复打开关闭这个控件相关的 Activity 的时候,没多久,就报 OOM 了。怎么办呢?下面一一道来!
笔者做了个简单的 demo。为了调试,把 ImageSlider 对应的 library 也下载到本地,让 demo 直接使用它。些 demo 的入口 Activity 为 ActMain(开启了 StrictMode)。在这个 ActMain 中有几个 Fragment,其中一个 Fragment 用上了 ImageSlider。在 APP 运行后,笔者反复触发 onConfigurationchanged。让 ActMain 反复创建