首页 > 解决方案 > new Handler().postDelayed(new Runnable() 内存泄漏

问题描述

关于堆问题和内存泄漏,
我阅读了以下文章,强调为处理程序部分创建静态类:
here

现在下面的代码是否容易发生堆内存泄漏?

///////////////////Handler 1
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        if (x == 1) {
            ///////////////////Handler 2            
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if(y == 1) {
                        ///////////////////Handler 3                        
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            //Do work A                             
                            }
                        }, 1000);
                    }
                    else
                    {
                        // do work B
                    }
                }
            }, 1000);
        }
        else
        {
            // do work B
        }
    }
}, 1000);

标签: androidheap-memoryhandlerleakcanary

解决方案


我进行了验证测试,结果是上面的代码没有检测到内存泄漏LeakCanary(为了确保LeakCanary工作正常,我使用了另一个泄漏的Handle问题示例,并且检测到了泄漏Handle

我无法描述确切的区别是什么


推荐阅读