【发布时间】:2019-05-22 18:50:47
【问题描述】:
我在使用共享元素转换时遇到了EnterTransitionCoordinator 中的内存泄漏问题。您可以在下面看到应用程序结构:
它有 2 个屏幕,第一个是 Activity,里面有 DrawerLayout 和几个 Fragments。其中一个包含照片列表,单击特定照片会触发共享元素从位于另一个Activity 的ViewPager 转换到Fragment。我在退出和重新进入这两个Activitys 时使用自定义SharedElementCallback 来映射正确的View 以进行共享元素转换。我的代码基于这篇很棒的博文:https://android.jlelse.eu/dynamic-shared-element-transition-23428f62a2af
问题是,在ViewPager 的项目之间滑动后,Fragments 被销毁,但用于共享元素转换的View 被保留在Activity 的ActivityTransitionState 中,特别是在EnterTransitionCoordinator。使用DrawerLayout 重新进入Activity 然后打开另一个Fragment 时也是如此。用于共享元素转换的 Views 的引用仍保留为 int Activitys,即使 Fragments 已被破坏,这会导致内存泄漏。
我的问题:有没有避免这种内存泄漏的好方法?
【问题讨论】:
标签: android kotlin memory-leaks shared-element-transition sharedelementcallback