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