1、问题代码:
匿名内部类AudioPlayer.OnPlayListener,引用了外部的 musicAdapter变量导致内存泄漏:
AudioPlayer.get().setPlayListener(object : AudioPlayer.OnPlayListener {
override fun onMusicPlay() {
}
override fun onMusicPause() {
}
override fun onMusicStop() {
}
override fun onComplete() {
}
override fun onError() {
Toaster.show("播放异常")
musicAdapter?.stopPlay(false)
}
})
2、优化后的代码:
使用弱引用WeakReference 存储外部变量。
internal class MyListener(musicAdapter: MusicAdapter?) : AudioPlayer.OnPlayListener {
var mActivityReference: WeakReference<MusicAdapter>
init {
mActivityReference = WeakReference(musicAdapter)
}
override fun onMusicPlay() {
}
override fun onMusicPause() {
}
override fun onMusicStop() {
}
override fun onComplete() {
}
override fun onError() {
Toaster.show("播放异常")
mActivityReference.get()?.stopPlay(false)
}
}
AudioPlayer.get().setPlayListener(MyListener(musicAdapter))
文章讨论了在Android开发中,由于匿名内部类对外部变量的引用可能导致内存泄漏的问题。通过使用WeakReference来存储外部变量,可以避免这种内存泄漏,确保当Activity不再使用时,可以被正确地回收。
1050

被折叠的 条评论
为什么被折叠?



