美文网首页
This Handler class should be sta

This Handler class should be sta

作者: dap2erp | 来源:发表于2020-05-16 10:48 被阅读0次

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

    相关文章

      网友评论

          本文标题:This Handler class should be sta

          本文链接:https://www.haomeiwen.com/subject/kvslohtx.html