匿名处理程序或Runnable会造成内存泄漏吗?

Sta*_*wed 2 java android memory-leaks

new Handler().postDelayed(new Runnable(){

@Override
public void run() {
     // do stuff
}}, 100);
Run Code Online (Sandbox Code Playgroud)

如果我从一个活动(onCreate或onResume或其他地方)调用它,这会导致内存泄漏吗?我已经读过它new Runnable()应该是一个静态实例,是真的吗?

Mac*_*ski 6

是.此代码可能会导致内存泄漏.

只要基于此匿名类Runnable在队列中(在此示例中为100毫秒),它就会保留对外部Activity类的引用.

当然,这样的内存泄漏本身并不是问题,但是根据内部run执行的代码,它可能会产生更大的问题,例如当您尝试在Activity被杀死后显示对话框时崩溃应用程序.在这种情况下,您将看到很好的信息异常:

IllegalArgumentException:无法在onSaveInstanceState之后执行此操作

要么

BadTokenException:无法添加窗口 - ...您的活动是否正在运行?