Android 异步转同步CountDownLatch

386 阅读1分钟

用于获取支付宝回调


private CountDownLatch payCountDownLatch;
//调起支付宝
public String toPay(final String orderStr) {

    payCountDownLatch = new CountDownLatch(1);
    Runnable payRunnable = new Runnable() {
        @Override
        public void run() {
            PayTask alipay = new PayTask(mContext);
            Map<String, String> result = alipay.payV2(orderStr, true);
            Message msg = new Message();
            msg.what = SDK_PAY_FLAG;
            msg.obj = result;
            mHandler.sendMessage(msg);

            mCountDownLatch.countDown();
        }
    };

    Thread payThread = new Thread(payRunnable);
    payThread.start();

    try{
        mCountDownLatch.await();
    }catch (InterruptedException e){
        e.printStackTrace();
    }

    return paycode;
}

@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
    @SuppressWarnings("unused")
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case SDK_PAY_FLAG: {
                @SuppressWarnings("unchecked")
                PayResult payResult = new PayResult((Map<String, String>) msg.obj);
                String resultStatus = payResult.getResultStatus();
                paycode = "{"code":""+resultStatus+""}";
                payCountDownLatch.countDown();
                break;
            }
            default:
                break;
        }
    }

};