通过HandlerThread优化UBT缓存流程

前言

本文是对之前实现的UBT中缓存事件的优化。
之前的UBT上报实现

HandlerThread

本质是个Thread,内部封装了一个Looper
,方便在子线程中使用Handler进行消息处理。
使用方式和线程一致,必须要调用start()开启一个线程。

//源码
public class HandlerThread extends Thread {
  //...
    @Override
    public void run() {
        mTid = Process.myTid();
        Looper.prepare();
        synchronized (this) {
            mLooper = Looper.myLooper();
            notifyAll();
        }
        Process.setThreadPriority(mPriority);
        onLooperPrepared();
        Looper.loop();
        mTid = -1;
    }
  //...
}
//调用
HandlerThread handlerThread = new HandlerThread();
handlerThread.start();

适用场景

需要开启一个子线程去处理某些事件,但是事件产生时间不确定,例如缓存UBT产生的事件。如不使用HandlerThread,就必须通过定时轮询的方式去获取是否有新的事件产生。

代码实现


public class UBTSaver {

    private HandlerThread handlerThread;

    private Handler mHandler;

    public UBTSaver() {
    }

    private void handleEvent(UBTReqeustEventModel event) {
        //处理无效session
        if (TextUtils.isEmpty(event.getSessionId())) {
            refreshSession(event);
        }
        //保存事件到数据库
        UBTEventDBManager.getInstance().insert(event);
        LogUtils.d(DRUBT.LOG_TAG + "保存成功一条数据,eventId:"+event.getEvent().getEventId());
    }

    private void refreshSession(final UBTReqeustEventModel event) {
//TODO 刷新session
    }

  //关闭线程
    public void shutDown() {
        mHandler.removeCallbacksAndMessages(null);
        handlerThread.quit();
    }

    public void enqueueEvent(UBTReqeustEventModel event) {
        Message message = Message.obtain();
        message.obj = event;
        mHandler.sendMessage(message);
    }

    public void start() {
        handlerThread = new HandlerThread("UBTSaver");
        handlerThread.start();
        mHandler = new Handler(handlerThread.getLooper()) {
            @Override
            public void handleMessage(Message msg) {
                UBTReqeustEventModel event = (UBTReqeustEventModel) msg.obj;
                handleEvent(event);
            }
        };
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容