Handler class should be static or leaks might occur

Android

This Handler class should be static or leaks might occur というエラーの解決方法

たとえば

 protected Handler addressUpdatePostHandler = new Handler() {
   public void handleMessage(Message msg) {
     // ハンドラーの中でやること
    }
 };

このようにハンドラーを作ると、上記のエラーになります。

じゃー staticにすればいいんだね!
とstaticにすると、そもそもハンドラーでやりたかった動的ないろんなことができなくなって不便になりますよね。(雑な説明ですみません。)

なんでこれがまずいかというと、こちらのサイトさんに詳しいです。
http://glayash.blogspot.jp/2012/08/handleleak.html

解決策はStack Overflowの下記のページにあるような感じです。
http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occur-incominghandler

簡単な方法は、Handler.Callbackを利用することです。
上記のコードを下記のように変更します。

 protected Handler addressUpdatePostHandler = new Handler(new Handler.Callback() {
       @Override
         public boolean handleMessage(Message msg) {
           //ハンドラーでやること
           return true;
        }
 });

これでは問題が解決しないこともあると書かれていますが、個人的な経験ではこれでほぼ直っているようです。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です