ongakuer / CircleIndicator

A lightweight indicator like in nexus 5 launcher
Apache License 2.0
4.27k stars 712 forks source link

发现内存泄露 #50

Closed doubleDragon closed 8 years ago

doubleDragon commented 8 years ago

在项目中LeakCanary检测了内存泄露 使用场景:CircleIndicator搭配ViewPager作为RecyclerView的一个Item

In com.qingsongchou.social:1.0.3:1.

ongakuer commented 8 years ago

这个跟进貌似一直走到系统的Interpolator里…

doubleDragon commented 8 years ago
private Animator createAnimatorIn(Context context) {
        Animator animatorIn;
        if (mAnimatorReverseResId == 0) {
            animatorIn = AnimatorInflater.loadAnimator(context, mAnimatorResId);
            animatorIn.setInterpolator(new ReverseInterpolator());
        } else {
            animatorIn = AnimatorInflater.loadAnimator(context, mAnimatorReverseResId);
        }
        return animatorIn;
    }

问题是出在这个ReverseInterpolator上,当界面finish的时候,持有了Context引用,这个我在其他机型上测试没有发现,只在一加的手机上出现了。

ongakuer commented 8 years ago

抱歉我没有一加手机来测试。 你可以试试在 View 的 onDetachedFromWindow 时把相关的 Animator 和 Interpolator 回收

smallgirl commented 8 years ago

LoopViewPager 滑动几页后手机会卡死。小米4,nexus 5 所有手机都是

ongakuer commented 8 years ago

@smallgirl 你是运行Sample里的LoopViewPager会卡死吗? 刚好有台 Nexus 5,但没有复现。

smallgirl commented 8 years ago

LoopViewPager 这个 快速滑动几页,我的nexus是6.01的系统 小米4是5.0的系统,就是滑到边缘的时候 会滑不动,或者出现下个页面的半屏幕 卡着。

smallgirl commented 8 years ago

@ongakuer 快速滑动 向右面滑动5-10个循环,然后向左滑动,没出现的话,再向右滑动

ongakuer commented 8 years ago

@smallgirl 复现了,你这是滑的速度实在有点夸张…在头尾替换的时候如果快速滑动会卡。这个是 LoopViewPager 的问题。

smallgirl commented 8 years ago

不只是速度的问题,滑到一定页数后,在往回慢滑动 也会卡,确实是LoopViewPager 的问题,循环viewpager的实现方式很多,自定view group 或者viewpager的adapter返回Integer.MAX_VALUE

ongakuer commented 8 years ago

恩,用LoopViewPager因为使用的人多。而且对外的暴露的数据是正确的。