为了解决这个问题,我们需要在Activity或Fragment的onStop()方法中释放ExoPlayer实例的资源。以下是一个简单的示例,它演示了如何在RecyclerView中使用ExoPlayer来播放视频,并在onStop()方法中释放它的资源。
首先,我们需要定义一个RecyclerView.Adapter,它将显示视频的缩略图以及一个播放按钮,当用户单击该按钮时,将在该位置播放视频。在ViewHolder上,定义一个ExoPlayerView,在底部实例化一个SimpleExoPlayer,以管理视频播放。
class MyAdapter : RecyclerView.Adapter() {
private val videoUrls = listOf(
"https://url.to/first/video.mp4",
"https://url.to/second/video.mp4",
"https://url.to/third/video.mp4"
)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.my_layout, parent, false)
return MyViewHolder(view)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.exoPlayerView.player = SimpleExoPlayer.Builder(holder.itemView.context).build()
holder.playButton.setOnClickListener {
playVideo(holder.exoPlayerView.player, videoUrls[position])
}
}
private fun playVideo(player: SimpleExoPlayer, url: String) {
player.setMediaItem(MediaItem.fromUri(url))
player.prepare()
player.play()
}
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val exoPlayerView = itemView.findViewById(R.id.exo_player_view)
val playButton = itemView.findViewById
现在,我们需要在Activity或Fragment中管理ExoPlayer实例的生命周期。当Activity或Fragment停止时调用ExoPlayer的release()方法,以释放其资源。
class MyActivity : AppCompatActivity() {
private lateinit var exoPlayer: SimpleExoPlayer
override fun onCreate(savedInstanceState: Bundle?)