package com.mopub.common.event; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import com.mopub.common.VisibleForTesting; import com.mopub.common.logging.MoPubLog; public class EventDispatcher { private final Iterable<EventRecorder> mEventRecorders; private final HandlerThread mHandlerThread; private final Handler mMessageHandler; @VisibleForTesting Handler.Callback mHandlerCallback; @VisibleForTesting EventDispatcher(Iterable<EventRecorder> recorders, HandlerThread handlerThread) { mEventRecorders = recorders; mHandlerCallback = new Handler.Callback() { @Override public boolean handleMessage(final Message msg) { if (msg.obj instanceof BaseEvent) { for (final EventRecorder recorder : mEventRecorders) { recorder.record((BaseEvent) msg.obj); } } else { MoPubLog.d("EventDispatcher received non-BaseEvent message type."); } return true; } }; mHandlerThread = handlerThread; mHandlerThread.start(); mMessageHandler = new Handler(mHandlerThread.getLooper(), mHandlerCallback); } void dispatch(BaseEvent event) { Message.obtain(mMessageHandler, 0, event).sendToTarget(); } }