1

如果我们使用非静态 Handler 会有一个警告:'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。当 Message 被Looper,msg调度到Handler( targetreference) 时,msg 被回收。

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

...

target = null;

...

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

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

4

0 回答 0