使用Handler时为什么会发生内存泄漏

时间:2012-12-29 02:15:39

标签: java android memory-leaks android-handler

如果我们使用非静态处理程序,则会出现警告:'处理程序应该是静态的,否则很容易出现内存泄漏。'

我已阅读以下链接,我知道他们的意思。

https://stackoverflow.com/a/7909437/619424
https://stackoverflow.com/a/11336822/619424

但在阅读Handler.javaMessage.javaLooper.java的来源后,我很困惑......

Looper.loop()方法中,我们可以看到以下陈述:

msg.target.dispatchMessage(msg);

...

msg.recycle();

变量msg将名为target的引用保存到对应的Handler。当Looper处理消息时,msg将被调度到Handlertarget引用),之后,msg将被回收。

Message.recycle()方法调用Message.clearForRecycle()方法,我们看到:

...

target = null;

...

target设置为null,这意味着Message不包含对Handler的引用。非静态Handler将被GC,并且ActivityView都将被GC。

所以我的问题是,为什么会发生内存泄漏?

0 个答案:

没有答案