new Handler().postDelayed(new Runnable() 内存泄漏
new Handler().postDelayed(new Runnable() memory leak
关于堆问题和内存泄漏,
我阅读了以下强调为处理程序部分创建静态 class 的文章:
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);
我进行了验证测试,结果是 LeakCanary
没有检测到上述代码的内存泄漏(为确保 LeakCanary
正常工作,我使用了另一个泄漏样本 Handle
问题并且检测到泄漏 Handle
)
我还不能描述确切的区别是什么
关于堆问题和内存泄漏,
我阅读了以下强调为处理程序部分创建静态 class 的文章:
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);
我进行了验证测试,结果是 LeakCanary
没有检测到上述代码的内存泄漏(为确保 LeakCanary
正常工作,我使用了另一个泄漏样本 Handle
问题并且检测到泄漏 Handle
)
我还不能描述确切的区别是什么