3

Handlerたとえば、 aを直接初期化して a で使用すると、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が、そうでないことをどのように確認できますか?

4

1 に答える 1

2

aを使用することWeakReferenceは、メモリリークを回避するための賢い方法です。コードは文脈から外れては良さそうに見えますが、メモリがリークしないようにするための最良の方法は、DDMSメモリアナライザを使用することです。続きを読む:Androidのメモリアナライザーツール?

于 2013-02-28T14:33:33.597 に答える