hander同步技巧 利用post之后的消息是最后完成的,实现同步。关

private void testWait(){HandlerThread ht = new HandlerThread("Camera Handler Thread");ht.start();mCameraHandler = new CameraHandler(ht.getLooper());mCameraHandler.obtainMessage(OPEN_CAMERA, 1, 0).sendToTarget();boolean ret = false;ret = mCameraHandler.waitDone();Log.v(TAG, "ret = " + ret);}private class CameraHandler extends Handler {CameraHandler(Looper looper) {super(looper);}/*** Waits for all the {@code Message} and {@code Runnable} currently in the queue* are processed.** @return {@code false} if the wait was interrupted, {@code true} otherwise.*/public boolean waitDone() {final Object waitDoneLock = new Object();final Runnable unlockRunnable = new Runnable() {@Overridepublic void run() {synchronized (waitDoneLock) {Log.v(TAG, " notifyAll start");waitDoneLock.notifyAll();}}};synchronized (waitDoneLock) {mCameraHandler.post(unlockRunnable);try {Log.v(TAG, "start wait");waitDoneLock.wait();} catch (InterruptedException ex) {Log.v(TAG, "waitDone interrupted");return false;}}return true;}/*** This method does not deal with the API level check. Everyone should* check first for supported operations before sending message to this handler.*/@Overridepublic void handleMessage(final Message msg) {switch (msg.what) {case OPEN_CAMERA:try {Log.v(TAG, "start sleep 4s");Thread.sleep(4000);Log.v(TAG, "end sleep 4s");} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}default:}}}

,不敢面对自己的不完美,总是担心自己的失败,

hander同步技巧 利用post之后的消息是最后完成的,实现同步。关

相关文章:

你感兴趣的文章:

标签云: