android - 如何/何时释放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 方法。但我不确定这是否适合这里。有人可以告诉我解决方案吗?
解决方案
推荐阅读
- excel - 嵌入图像,以便它们在发送给外部方时可用
- c++11 - 二分搜索的奇怪输出
- google-bigquery - 从配置文件中寻找 BQ SQL builder
- node.js - 赛普拉斯 UI 测试因等待浏览器而超时
- unity3d - 在 Unity 中为对象的不同部分分配不同颜色的着色器
- php - 如何将多个数组项与一个数组项进行比较以进行猜词脚本
- mysql - 如何仅对特定行的值求和?
- systemc - 端口未绑定 SystemC (E112)
- css - 移动设备和桌面设备不会返回卡背面的左箭头
- symfony - 检查网络服务器是否正在运行,并且没有防火墙阻止 Facebook 的爬虫 Symfony