我正在尝试实现一种机制,该机制将使我等待函数完成(尤其是返回调用),直到我将在接收器内部得到一些响应为止。接收器正在等待来自API的某些调用或其他耗时的操作的响应。
我试图做一个在布尔标志(易失性)上运行的while循环,该循环应该在接收器中更改,但是结果是循环一直运行,并且该标志永不改变。
我还尝试实现了一个等待通知机制,但是,等待函数也“阻塞”了接收者以调用通知。
编辑:我也尝试使用BlockingQueue,但是这里也没有运气。
我在实现中附加了一些示例代码。
public String getRemoteInfo() {
getInfo();
while (!finished){
Uninterruptibles.sleepUninterruptibly(200, TimeUnit.MILLISECONDS);
}
return globalResult;
}
private void getInfo(){
service.getInfo(this); //"this" is an implementation of receiver
}
@Override
public void infoReceived(String result) {
globalResult = result;
finished = true;
}
答案 0 :(得分:0)
这是一种可怕的方式-像轮询那样睡觉,这对性能,电池寿命等都有不利影响。正确的做法是使用信号量,并让线程等待等待信号量,然后在后台执行的功能会在信号量完成后向信号量发出信号。
请注意,您永远不要在UI线程上这样等待,因为您的应用在等待时将无响应。