我知道如果你直接初始化一个 Handler
并在 Activity
中使用它,它会泄漏 Context
(由 Alex Lockwood 提供) ,例如
public class SampleActivity extends Activity {
private final Handler mLeakyHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
/* ... */
}
}
}
所以我使用了下面的方法
private static class StaticHandler extends Handler {
private final WeakReference<SampleActivity> mSampleAct;
private StaticHandler(SampleActivity act) {
mSampleAct = new WeakReference<SampleActivity>(
act);
}
}
然后我初始化如下
public class SampleActivity extends Activity {
private Handler myHandler = new StaticHandler(this) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
processTask(msg.obj);
}
};
}
我想知道我的 Handler
即 myHandler 是否仍会泄漏 Context
,我如何确定它不会泄漏?
最佳答案
使用 WeakReference
绝对是避免内存泄漏的明智方法。代码在上下文之外对我来说看起来不错,但确保它不会泄漏内存的最佳方法是使用 DDMS 内存分析器。阅读更多:Memory Analyzer Tool in android?
关于android - 这个 Handler 还会泄露 Context 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138011/