Handler内存泄露处理方式

Handler内存泄露处理

  1. 关于Handler内存泄露可以看下面的博客,我经常看的博主
    Android 内存泄露:详解 Handler 内存泄露的原因

Handler的内存泄露就是Handler默认持有了Activity或这Fragment的引用,从而导致Activity销毁后,Handler还持有Activity的引用导致Activity不能被gc回收。解决方案就是静态内部类+弱引用,使用方式可以学Fragment在Activity的绑定与解绑方式,因为静态类不会持有外部类的 引用。

我用的kotlin,Java的方式代码也是一样,自己去写了,懒得贴了
/**
     * Handler,避免内存泄露
     */
    private class CustomHandler : Handler() {
        private lateinit var weakReference: WeakReference

        fun attachHandler(homeFragment: HomeFragment) {
            weakReference = WeakReference(homeFragment)
        }

        fun detachHandler() {
            weakReference.clear()
        }

        override fun handleMessage(msg: Message?) {
            super.handleMessage(msg)
            when (msg?.what) {
                100 -> {
                    // 然后这里使用weakReference.get()获取弱引用保存的对象
                    // 我这里是HomeFragment
                }
            }

        }
    }

你可能感兴趣的:(android)