package net.hopeisagoodthing.handlerthreadexample; import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.util.Log; import java.util.concurrent.CountDownLatch; /** * Simple HandlerThread Example. */ class SimpleHandlerThread extends HandlerThread implements ClosableThread { private static final String TAG = SimpleHandlerThread.class.getSimpleName(); private final CountDownLatch countDownLatch = new CountDownLatch(1); private Handler handler = null; private static final int REQUEST = 1; private Monitor monitor; SimpleHandlerThread(String name) { super(TAG); } SimpleHandlerThread(Monitor monitor) { super(TAG); this.monitor = monitor; } @Override public void onLooperPrepared(){ super.onLooperPrepared(); handler = new Handler(getLooper()) { @Override public void handleMessage(Message message) { switch (message.what) { case REQUEST: Log.i(TAG,"new request has been arrived. " + message.obj); if(monitor != null) { monitor.onProcessed((String)message.obj); } break; } } }; if(monitor != null) { monitor.onStarted(this); } countDownLatch.countDown(); } void request(String request) { if(getState() == State.NEW) { start(); } try { countDownLatch.await(); } catch (InterruptedException e) { Log.e(TAG, "request: interrupted.", e); } if(handler != null) { Message message = handler.obtainMessage(REQUEST, request); handler.sendMessage(message); } } @Override public void close(){ quitSafely(); interrupt(); Log.i(TAG,"closed."); } }