Android 这个处理程序还会泄漏上下文吗?

Android 这个处理程序还会泄漏上下文吗?,android,android-context,android-handler,Android,Android Context,Android Handler,我知道,如果您直接初始化处理程序,并在活动中使用它,它将泄漏上下文(由提供),例如 public class SampleActivity extends Activity { private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { /* ... */ } } } 所以我采用了以下方法 priva

我知道,如果您直接初始化
处理程序
,并在
活动
中使用它,它将泄漏
上下文
(由提供),例如

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);
    }

}

我想知道我的
处理程序
即myHandler是否仍会泄漏
上下文
,我如何确定它不会泄漏?

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

 public class SampleActivity extends Activity {
    private Handler myHandler = new StaticHandler(this) {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            processTask(msg.obj);
        }
    };
}