【发布时间】:2012-10-23 23:43:14
【问题描述】:
我的活动如下所示:
class MyActivity extends Activity {
Runnable refreshTimer = new Runnable() {
public void run() {
refresh();
}
};
protected onCreate(...) {
handler.postAtTime(refreshTimer, ...);
}
protected onDestroy() {
handler.removeCallbacks(refreshTimer);
}
protected void refresh() { ... }
}
调用 onDestroy 后,由于某种原因,活动的 MessageQueue 中仍有消息包含对 MyActivity$0(刷新 Runnable)的引用。因为 MyActivity$0 隐式引用了 MyActivity,这会导致 MyActivity 上下文的内存泄漏。
使用 Eclipse Memory Analyzer Tool 对 android.app.Activity 的 merge_shortest_paths 的结果,不包括 phantom、soft、weak 等引用:
(上面的源代码是MAT转储中显示的实际对象关系的简化)
不应该调用 removeCallbacks 从队列中删除对可运行对象的任何引用吗?为什么我会泄露上下文?
【问题讨论】:
标签: android