回收器视图中的 Exoplayer 给出内存不足异常



RecyclerView,每个项目作为Exoplayer抛出内存异常,即使在适配器的onViewRecycled((方法中释放播放器后也是如此。 我能做些什么来解决这个问题?

我已经浏览了有关此问题的其他帖子,其中我尝试了此链接,但这也不起作用。

而且我已经增加了清单中的堆大小

来自适配器的代码片段:

override fun onBindViewHolder(holder: MemoryHomeHolder, position:Int) 
{
val memory = memoryList[position]
holder.bind(memory)
holder.itemMemoryListBinding.playerView?.useController = true
holder.itemMemoryListBinding.playerView?.showController()
val path: memory.path
val player = ExoPlayerFactory.newSimpleInstance(
context,
DefaultTrackSelector(),
DefaultLoadControl()
)
val dataSourceFactory = DefaultDataSourceFactory(
context,
Util.getUserAgent(context, AppConstants.OFH)
)
val source = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(Uri.parse(path))
holder.itemMemoryListBinding.playerView?.player = player
holder.itemMemoryListBinding.playerView?.controllerHideOnTouch = false
holder.itemMemoryListBinding.playerView?.controllerShowTimeoutMs = -1
holder.itemMemoryListBinding.playerView?.resizeMode =
AspectRatioFrameLayout.RESIZE_MODE_FILL
holder.itemMemoryListBinding.playerView?.exo_progress?.visibility 
= View.GONE
(holder.itemMemoryListBinding.playerView?.player as 
SimpleExoPlayer?)?.prepare(source)
(holder.itemMemoryListBinding.playerView?.player as 
SimpleExoPlayer?)?.repeatMode = Player.REPEAT_MODE_ALL
activePlayerHolders.add(holder)
Log.d(TAG, "holder init for position = $position")
}
override fun onViewRecycled(holder: MemoryHomeHolder) {
super.onViewRecycled(holder)
holder.itemMemoryListBinding.playerView?.player?.release()
}

我希望RecyclerView将Exoplayer作为每个持有者中的项目,并且它不应该抛出内存异常

我没有在onViewRecycled((方法上正确释放播放器,这导致了内存不足异常。

您可以简单地释放被释放的持有者的玩家,如下所示:

holder?.playerView?.player?.release()

这解决了问题。

最新更新