This Handler class should be sta

2020-05-16  本文已影响0人  dap2erp

handler lead 的分析和解决

[TOC]

现象及分析

在 Activity 中直接 new 一个普通 Handler 的时候会提示 This Handler class should be static or leaks might occur

原因是普通的内部类会持有外部类的引用,从而导致 Activity 无法被回收的问题。所有才会提示 Handler should be static。

解决方案

在工具类中定义 static Handler 内部类,类内部使用 WeakReference 存储 acitivity 实现的 MyHandlerCallback 接口,保证能及时释放。

工具类:Util.java
    public interface MyHandlerCallback {
        public void onHanlderCallback(Message msg);
    }

    public static class MyHandler extends Handler {
        private final WeakReference<MyHandlerCallback> mCallback;
        public MyHandler(MyHandlerCallback callback) {
            mCallback = new WeakReference<>(callback);
        }

        @Override
        public void handleMessage(Message msg) {
            mCallback.get().onHanlderCallback(msg);
        }
    }
Activity 中使用,需要实现 MyHandlerCallback 接口
    private MyHandler mHandler = new MyHandler(this);

    @Override
    public void onHanlderCallback(Message msg) {
        switch (msg.what) {
            case MSG_DATA_LOADED:
                setAdapter();
                break;
            default:
                Log.e(TAG, msg + " can not be recognize");
        }
    }
上一篇下一篇

猜你喜欢

热点阅读