在我的应用程序的主要活动中,我向用户展示了许多卡片。当他单击其中任何一个时,会打开一个包含
ViewPager2
的片段。 viewPager2 内的片段每个都包含一个 ExoPlayer
,并在恢复时播放相关视频。
当用户单击后退按钮时,必须关闭该片段并释放其所有子级(包括 viewPager2 及其片段和 exoPlayers)。为了释放 exoPlayers,我在 viewPager2 片段的
OnDestroyView()
中使用以下代码:
@Override
public void onDestroyView() {
super.onDestroyView();
try {
if (player != null && listener != null) {
player.removeListener(listener);
player.release();
player = null;
}
if (playerView != null)
playerView.setPlayer(null);
dashMediaSource = null;
progressiveMediaSource = null;
playerView = null;
listener = null;
} catch (Exception ignored) {
}
}
之后,我运行 Android Studio profiler 来检查应用程序堆,我注意到一些与 exoPlayer 相关的对象仍在内存中:
现在的问题是我在释放内存,特别是 exoPlayers 时犯了错误吗?如果不是,为什么这些对象仍然在 RAM 中以及如何删除它们?
我也有同样的问题 https://github.com/androidx/media/issues/1113 我想也许player.release不是为了释放内存