可以发消息的子线程handler封装类

刚解了个bug,写下来:
项目中需要用到不停的接收消息并分发的需要
但有些消息需要主线程,有些需要子线程,就是不能在当前线程(系统服务,不能直接在该服务里操作,崩溃的话,会导致该服务也崩溃)
这里封装了个支持发送主线程,子线程消息的类。用法简单:
像使用主线程的handler一样处理即可

一 看下用法:

子线程
HandlerManager.getInstance().getSubHandler().post(new Runnable() {
            @Override
            public void run() {
                showEaglePath();
            }
        });

主线程
HandlerManager.getInstance().getMainHandler().post(new Runnable() {
            @Override
            public void run() {
                showEaglePath();
            }
        });     

   
二 看下具体代码:

        
public class HandlerManager {

    /* BL允许HMI传入子线程looper,以避免在ui线程操作图层导致卡顿 */
    private final boolean useMainLooper = false;
    private HandlerThread bizThread;
    //对象保持原子性
    private final AtomicReference subHandler = new AtomicReference<>();

    //对象保持原子性
    private final AtomicReference mainHandler = new AtomicReference<>();

    //延时加载
    private static class HandlerManagerHold {
        private static HandlerManager mInstance = new HandlerManager();
    }

    private HandlerManager() {
        initLooper();
    }

    public static HandlerManager getInstance() {
        return HandlerManagerHold.mInstance;
    }


    private void initLooper() {
        Handler sub,main;

        bizThread = new HandlerThread("subThread");
        bizThread.start();
        sub = new Handler(bizThread.getLooper());
        subHandler.set(sub);

        main = new Handler(Looper.getMainLooper());
        mainHandler.set(main);

    }

    private void stopSubLooper() {
        //停止子线程looper并释放资源
        bizThread.quit();
        Handler h = subHandler.getAndSet(null);
        if (h != null) {
            h.removeCallbacksAndMessages(null);
        }
    }

    public Handler getSubHandler() {
        return subHandler.get();
    }

    public Handler getMainHandler() {
        return mainHandler.get();
    }
}

里面主要是封装了个 HandlerThread,和 intentservice 比较类似。


 

你可能感兴趣的:(android应用层基础,java,android)