在使用共享元素转换时,$ g++ gen.cpp -std=c++2a
In file included from gen.cpp:2:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/experimental/coroutine:66:5: warning:
<experimental/coroutine> cannot be used with this compiler [-W#warnings]
# warning <experimental/coroutine> cannot be used with this compiler
^
中的内存泄漏有问题。您可以在下面看到应用的结构:
它有2个屏幕,第一个是EnterTransitionCoordinator
,里面有Activity
,里面只有几个DrawerLayout
。其中一个包含一张照片列表,单击特定的照片触发器会触发共享元素从位于另一个Fragment
中的Fragment
到ViewPager
的过渡。我在退出并重新输入这两个Activity
时使用自定义SharedElementCallback
来为共享元素转换映射正确的Activity
。我的代码基于以下出色的博客文章:https://android.jlelse.eu/dynamic-shared-element-transition-23428f62a2af
问题是,在View
的项目之间滑动后,ViewPager
被销毁,但是用于共享元素转换的Fragment
被保留在{{1} }的View
,尤其是在Activity
中。使用ActivityTransitionState
重新进入EnterTransitionCoordinator
然后打开另一个Activity
时,情况相同。即使DrawerLayout
被销毁了,但用于共享元素转换的Fragment
的引用仍保持为整型View
,这会导致内存泄漏。
我的问题:是否有避免这种内存泄漏的好方法?
答案 0 :(得分:2)
我发现Activity
中有一个方法Fragment
,应在clearState()
中调用。但是由于EnterTransitionCoordinator
尚未停止,因此Activity.onStop()
中的Activity
s已泄漏。作为暂时的解决方法,我将通过反射调用此方法来手动清除View
上的状态。在下面您可以看到代码:
Fragment