【问题标题】:Wait with function completion untill the callback will come等待函数完成,直到回调到来
【发布时间】:2019-05-11 13:09:40
【问题描述】:

我正在尝试实现机制,这将让我等待函数完成(特别是返回调用),直到我在接收器中得到一些响应。接收方正在等待来自 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;
}

【问题讨论】:

  • 可能接口可以工作..
  • @AbhayKoradiya 实际上,由于其他一些架构原因,这个返回 String 的方法应该保持同步。我正在寻找延迟方法完成的方法(即使它冻结线程几秒钟)

标签: java android asynchronous callback async-await


【解决方案1】:

这是一种可怕的做法——这样的睡眠称为轮询,它对性能、电池寿命等不利。正确的做法是使用信号量,并让希望等待的线程等待信号量,在后台执行的函数会在信号量完成时发出信号。

请注意,您永远不要在 UI 线程上这样等待,因为您的应用在等待时会无响应。

【讨论】:

  • 是的,我知道我不应该在 UI 线程上执行此操作,但最终在这种情况下,等待将发生在其他非 UI 线程上。我的问题是,我该如何执行这个等待?不应该我是否应该这样做:) 我会尝试使用信号量方法,谢谢
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多