Kotlin匿名内部类持有外部类的引用,导致内存泄漏的解决方案

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))

猜你喜欢

转载自blog.csdn.net/zhijiandedaima/article/details/131640623
今日推荐