【问题标题】:Will this Handler still leak Context?这个 Handler 还会泄漏 Context 吗?
【发布时间】:2013-02-28 14:29:36
【问题描述】:

我知道,如果您直接初始化 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,我如何确定它不会泄漏?

【问题讨论】:

    标签: android android-context android-handler


    【解决方案1】:

    使用WeakReference 绝对是避免内存泄漏的明智方法。代码在上下文中看起来不错,但确保它不会泄漏内存的最佳方法是使用 DDMS 内存分析器。阅读更多:Memory Analyzer Tool in android?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      相关资源
      最近更新 更多