Мой фрагмент открывается и закрывается с помощью 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 }
}