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

and*_*ios 9 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);
Run Code Online (Sandbox Code Playgroud)

this是片段发生和实现的活动YouTubePlayer.OnInitializedListener.

如何释放在initialize方法上传递的回调?

我试着打电话youtubePlayer.release()但问题仍然存在.

hul*_*ius 1

这周我受到了这次泄漏的打击。无论票证的状态如何,Google 似乎仍然没有修复它。我对我的初始项目(泄漏导致 OOM)以及Google 的演示项目进行了一些测试。我的观察是:

  • YouTubePlayer.OnInitializedListener造成泄漏的不是侦听器。调用 时YouTubePlayerFragment.initialize(),会调用YouTubePlayerFragment获取托管片段的活动的引用。initialize()因此,当片段停止时尝试使用空的静态侦听器进行调用并希望清除引用是没有运气的。
  • 虽然肯定存在泄漏,但似乎在某个时候正在进行清理工作。我会查看同一活动的 18 个实例,然后计数会下降到 8 个实例。所以我猜想在大多数情况下,泄漏可能会被忽视。
  • YouTubePlayerFragment& YouTubePlayerView,同样的泄漏。

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