美文网首页
HandlerUtil 消息机制工具类

HandlerUtil 消息机制工具类

作者: 颤抖的闪电 | 来源:发表于2017-11-17 15:16 被阅读0次

前言:为了更简单,更方便,更有效地在Activity中快速使用handler,并且消除handler所带来的内存泄露等等弊端,所以撸了一个HandlerUtil工具类。核心类如下,相当简单、淳朴,一看就懂的那种:

/**
 * @desc handler工具辅助类,方便快速使用handler主线程
 * @auth 方毅超
 * @time 2017/11/17 11:01
 */

public class HandlerUtil {

    private static MyHandler mHandler;

    /**
     * 直接获取handler
     *
     * @return
     */
    public static MyHandler getHandler() {
        if (mHandler == null)
            mHandler = new MyHandler();
        return mHandler;
    }

    /**
     * 设置handler,自定义handleMessage方法所要处理的内容。
     *
     * @param handler
     */
    public static void setHandler(MyHandler handler) {
        unInit();
        mHandler = handler;
    }

    /**
     * 格式化handler
     */
    public static void unInit() {
        //清除Handler的Message和Runnable
        if (mHandler == null) return;
        mHandler.removeCallbacksAndMessages(null);
        mHandler = null;
    }


    /**
     * 静态Handler类,不持有外部context。
     */
    public static class MyHandler extends Handler {
        private WeakReference<Activity> mActivity;

        public MyHandler() {
        }

        public MyHandler(Activity activity) {
            mActivity = new WeakReference<Activity>(activity);
        }

//        @Override
//        public void handleMessage(Message msg) {
//            if (mActivity != null) {
//                Activity activity = mActivity.get();
//                if (activity != null) {
//                    // ...
//                }
//            }
//        }
    }

    /**
     * 静态Runnable类,不持有外部context?
     */
    public static abstract class MyRunnable implements Runnable {
        public MyRunnable() {
        }

//        @Override
//        public void run() {
//            Log.d(TAG, "run: ");
//        }
    }
}

调用方法如下:
1、设置具体的handler,自定义handleMessage方法所要处理的内容

HandlerUtil.setHandler(new HandlerUtil.MyHandler(getActivity()) {
                                @Override
                                public void handleMessage(Message msg) {
                                }
                            });

2、提交任务

HandlerUtil.getHandler().postDelayed(new HandlerUtil.MyRunnable() {
                                @Override
                                public void run() {
                                    // ToDo
                                }
                            }, 500);

3、保险起见,在Activity退出时清除任务,在onDestroy()中

HandlerUtil.unInit();

后言:在HandlerUtil工具类中的静态MyRunnable,这样写以及这样引用不知道能否起到不持有外部context的作用?后续补上,或者看客们有什么好提议、好建议,欢迎交流,谢谢。

相关文章

  • HandlerUtil 消息机制工具类

    前言:为了更简单,更方便,更有效地在Activity中快速使用handler,并且消除handler所带来的内存泄...

  • runtime系列文章总结

    《iOS Runtime详解(消息机制,类元对象,缓存机制,消息转发)》《消息转发机制与Aspects源码解析》《...

  • Android异步消息机制之Handler

    Android消息机制 android消息机制的核心类: Looper Handler MessageQueue-...

  • Android消息机制与类加载

    Android消息机制原理Android类加载Android热修复 Android消息机制    Handler、...

  • Android消息处理机制

    Hi~ 我们来说说Android的消息处理机制 消息处理机制 相关类 Message:消息,其中包含了消息ID,处...

  • ThreadLocal完全解析

    熟悉Android消息机制的话,对ThreadLocal这个类应该都不陌生。Android消息机制中的Looper...

  • Handler和Looper解析

    消息机制主要包含4个类Message 消息MessageQueue 消息队列,增加一个消息enqueueMessa...

  • VC++(四)简单绘图

    MFC消息映射机制 MFC消息映射机制的具体实现方法是:在每个能接收和处理消息的类中,定义一个消息和消息函数静态对...

  • WebRTC中的消息机制

    WebRTC中,与消息机制有关的类主要有MessageQueue, Thread, SocketServer, 类...

  • 深入了解Handler

    Android中的消息机制离不开Handler,那么作为Android的消息机制到底是怎样的呢?相关类:Handl...

网友评论

      本文标题:HandlerUtil 消息机制工具类

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