Android

Handlerのリーク警告を回避する

Handlerのリーク警告が出る

以下のようなHandlerを書くと、
AndroidStudio(lint)から警告を受け、黄色くなります。

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // 処理
        }
    };
This Handler class should be static or leaks might occur (anonymous android.os.Handler)

この警告はなかなか解決できなかったので、放置していましたが、
ようやく警告を取ることができたのでその方法を書いておきます。

解決方法

staticにすれば解決できますが、
staticにできない場合も多いと思います。
そんな時は、Handler.Callbackを使えばOKです。

    private Handler handler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            // 処理
            return true;
        }
    });

ラムダ式だと、

    private Handler handler = new Handler(msg -> {
        // 処理
        return true;
    });

戻り値は基本はtrueでOKです。
falseにすると、メッセージに対して余計な追加処理が発生するらしいです。