由YouTubePlayer.Provider的初始化方法导致的内存泄漏

时间:2014-11-25 13:29:54

标签: java android memory-leaks android-youtube-api

使用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(),但问题仍然存在。

1 个答案:

答案 0 :(得分:1)

本周我被这次泄密击中了。无论ticket's status如何,谷歌似乎仍未修复它。我对我的初始项目进行了一些测试,其中泄漏导致了OOM,并且在demo project by Google上。我的观察是:

  • 导致泄密的不是听众YouTubePlayer.OnInitializedListener。在调用YouTubePlayerFragment.initialize()时,YouTubePlayerFragment中的调用会获取对托管片段的活动的引用。因此,当片段被停止时尝试使用空的静态侦听器调用initialize()没有运气,希望清理引用。
  • 虽然确实存在泄漏,但似乎在某些时候,正在进行清理。我会去18个相同活动的实例,然后计数将下降到8个实例。所以我想对于大多数情况来说,泄漏可能会被忽视。
  • YouTubePlayerFragment&安培; YouTubePlayerView,同样的泄密。

我没有看到任何解决方法。我想我将不得不使用另一种实现,基于像这样的webview:https://github.com/PierfrancescoSoffritti/Android-YouTube-Player