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() { @Override public 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. */ @Override public 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: } } }
时间: 2024-10-06 10:12:33