有没有人解决 daimajia AndroidImageSlider 库内存泄漏?
我在我的项目中使用它,它完全满足所有需求 唯一的麻烦是碎片重新生成后发生的内存泄漏 这个"滑动画廊的老实例"留在内存中,它会导致OutOfMemory。
我尝试重写SliderLayout.java中的onDetachedFromWindow方法
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
if(mCycleTimer != null) mCycleTimer.cancel();
if(mCycleTask != null) mCycleTask.cancel();
if(mResumingTask != null) mResumingTask.cancel();
if(mResumingTimer != null) mResumingTimer.cancel();
mh.removeCallbacksAndMessages(null);
}
如此处所述:https://github.com/daimajia/AndroidImageSlider/issues/122
当然,我也会在removeAllSliders()
方法中致电stopAutoCycle()
和onStop()
但不幸的是,它没有帮助
感谢任何建议
答案 0 :(得分:-1)
如果有人在同一个问题上挣扎, 我终于找到了解决方案:
关键是使用WeakReferences for Sliders。
所以我的情况看起来如何:
// I use self modified CustomSliderView, but you are free to use base sliders as well
WeakHashMap<Integer, CustomSliderView> mWaeakSliderMap;
然后在onCreateView中以这种方式添加滑块:
mWaeakSliderMap = new WeakHashMap<>();
// adding sliders to the weak map
// sAdvertisementBitmaps is an ArrayList of Files in my case
for (int i = 0; i < sAdvertisementBitmaps.size(); i++) {
final CustomSliderView sliderView = new CustomSliderView(mContext);
sliderView.image(sAdvertisementBitmaps.get(i));
mWaeakSliderMap.put(i, sliderView);
}
// attaching sliders to the slider layout
for (Map.Entry<Integer, CustomSliderView> entry : mWaeakSliderMap.entrySet()) {
mSliderLayout.addSlider(entry.getValue());
}
另外在SliderLayout.java中 我将下一个字段设为静态: 的 mCycleTimer; mCycleTask; mResumingTimer; mResumingTask; 强>
因此它可以防止无用的重新创建TimerTask对象。
现在内存泄漏几乎已经解决了