首页 > 解决方案 > 如何/何时释放recyclerView中viewHolder获取的资源?

问题描述

简单来说,我有一个 recyclerView,它的 viewHolders 持有 MediaPlayer 实例。当用户关闭该活动时,我想释放 MediaPlayer 实例获取的资源。但与 onCreateViewHolder 不同的是,我找不到任何 onDestroyViewHolder 方法。我的 viewHolder 实现如下所示:

class MyViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    private val mMediaPlayer: MediaPlayer? = null
    
    internal fun onBind(model: Model) {
        if(model.contentType == "Audio") {
            mMediaPlayer = MediaPlayer()
            mMediaPlayer.setOnPreparedListener(mPreparedListener);
            mMediaPlayer.setOnCompletionListener(mCompletionListener);
            mMediaPlayer.setDataSource(mContext, uri, null)
            mMediaPlayer.prepareAsync()
            // do other stuff

        } else if(mMediaPlayer != null) {
            mMediaPlayer.reset()
            mMediaPlayer.release()
            mMediaPlayer = null
        }
    }
}

我知道 Adapter 类有 onViewDetachedFromWindow 方法。但我不确定这是否适合这里。有人可以告诉我解决方案吗?

标签: androidkotlinandroid-recyclerviewandroid-mediaplayerandroid-lifecycle

解决方案


推荐阅读