RevealAnimator.mClipView утечка памяти при использовании в качестве анимации закрытия в Fragment # onCreateAnimator - PullRequest
1 голос
/ 05 марта 2019

Мой фрагмент открывается и закрывается с помощью Reveal Animation, что приводит к утечке памяти RevealAnimator.mClipView (обнаруживается через LeakCanary).

Я даже передал WeakReference представления вместо самого представления,но все еще течет память?

Это мой код:

fun getExitAnimator(context: Context, viewReference: WeakReference<View>, revealAnimationSettings: RevealAnimationSettings): AnimatorSet? {
    return if (Utils.isLollipop()) {
        viewReference.get()?.let {
            val animDuration = context.resources.getInteger(android.R.integer.config_mediumAnimTime)

            val startRadius = hypot(it.width.toFloat(), it.height.toFloat())

            val circularRevealAnimation = ViewAnimationUtils.createCircularReveal(it, revealAnimationSettings.centerX, revealAnimationSettings.centerY, startRadius, 0.0f)
            circularRevealAnimation.apply {
                duration = animDuration.toLong()
                interpolator = FastOutSlowInInterpolator()
            }
            AnimatorSet().apply {
                playTogether(circularRevealAnimation, getColorAnimator(it, revealAnimationSettings.endColor, revealAnimationSettings.startColor, animDuration))
            }
        }
    } else null
}

А Аниматор вызывается во Фрагментах onCreateAnimator:

override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? {
    return NewBookEntryFragmentArgs.fromBundle(requireArguments()).revealAnimationSettings?.let {
        AnimationUtils.getExitAnimator(requireContext(), WeakReference(requireView()), it)
    }?.takeIf { !enter }
}
...