0
我需要使用現有的API,假設它將直接在Activity中用於簡單的應用程序。我的用例需要從Service中調用API,並等待所需的Handler返回所需的數據。Android/Java在返回服務之前等待處理程序
我已經嘗試了許多沒有成功的Java併發選項。任何人都可以提出更好的方法?
下面是一個非常簡化的例子,它比一個工作例子更僞代碼。
public class dataConnection {
Controlx xControl;
CountDownLatch doneSignal = new CountDownLatch(1);
Context c = null;
private String data1;
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
setReturnData(msg);
doneSignal.countDown();
}
};
public dataConnection(Context ctx) {
this.c = ctx;
xControl = new Controlx (c, mHandler);
}
private void setReturnData(int rc) {
this.rc = rc;
}
private int getReturnData() {
return this.rc;
}
public int getRealData() {
//API will timeout in 10 seconds if data is not retrieved before that
xControl.dataCmd(10);
//Wait here for handler to finish and then retrieve data to return
doneSignal.await();
int i = getReturnData();
Log.v("log_tag", "RETURN NOW!!!!!!!!!!!!!!!");
return data;
}
可以處理程序中創建,然後在子線程催生?我嘗試了另一種方式,在getRealData內部創建了一個線程,這在一定程度上起作用,但在getRealData返回之前我找不到合理的方法來檢索數據(即使使用AsyncTask .get方法)。 – Ressor
是的,活頁頁面給出了一個可以做到這一點的示例類。傳回信息可能會有點棘手。有幾個選項是設置一個靜態變量或引用,它是同步的,'doneSignal.away()'定期檢查,或讓'getRealData()'返回一個void,然後使用主處理函數或返回的'intent'繼續之後在主線程上工作。如果沒有指定doneSignal.away()的具體內容,可能會有很多不同的方式來實現它。 – Jon