使用Eclipse Memory Analyzer我发现如果我在2个活动(例如A和B)之间来回切换,虽然调用活动B的onDestroy方法,但GC从不将其从内存中删除,所以我有多个Activity B实例在记忆中。 我发现问题出在在YouTubePlayerFragment实例上调用的initialize方法中。 这是代码:
YouTubePlayerFragment ytpf =(YouTubePlayerFragment) getFragmentManager().findFragmentById(R.id.youtube_fragment);
ytpf.initialize(DEVELOPER_KEY,this);
this
是发生片段的活动,并实现YouTubePlayer.OnInitializedListener
。
如何释放在initialize方法上传递的回调?
我试图致电youtubePlayer.release()
,但问题仍然存在。
答案 0 :(得分:1)
本周我被这次泄密击中了。无论ticket's status如何,谷歌似乎仍未修复它。我对我的初始项目进行了一些测试,其中泄漏导致了OOM,并且在demo project by Google上。我的观察是:
YouTubePlayer.OnInitializedListener
。在调用YouTubePlayerFragment.initialize()
时,YouTubePlayerFragment
中的调用会获取对托管片段的活动的引用。因此,当片段被停止时尝试使用空的静态侦听器调用initialize()
没有运气,希望清理引用。YouTubePlayerFragment
&安培; YouTubePlayerView
,同样的泄密。我没有看到任何解决方法。我想我将不得不使用另一种实现,基于像这样的webview:https://github.com/PierfrancescoSoffritti/Android-YouTube-Player