#android #android-fragments #memory-leaks #android-animation
#Android #android-фрагменты #утечки памяти #android-анимация
Вопрос:
Мой фрагмент открывается и закрывается анимацией раскрытия, что вызывает утечку памяти 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 }
}