有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java线程通过等待intent阻止自己发送intent

我目前正在编写一些代码,将意图发送到外部应用程序,并使用“sendOrderedBroadcast()”和条件变量等待响应。在执行此操作时,我试图在等待外部应用程序的响应时阻止发送意图

我的代码如下所示:

final ConditionVariable cond = new ConditionVariable();
BroadcastReceiver responseReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        //set data values here
        cond.open();
    }
};
sendOrderedBroadcast(intent, null, responseReceiver , null, 0, null, null);
cond.block(TIMEOUT);

这种情况是,当应用程序以每秒2-3次的速率触发这段代码时,sendOrderedBroadcast实际上不会在调用block()方法之前发送意图(或者至少这是我目前的理论)。这意味着在超时完成之前,接收应用程序不会接收到意图

有没有一个简单的方法来解决这个问题?我尝试过使用不同的方法来等待这个意图的返回(休眠、忙等待、倒计时锁存、独立线程等),但我一直遇到相同的问题


共 (1) 个答案

  1. # 1 楼答案

    调用sendOrderedBroadcast()时,广播不会立即执行,也不会由发出调用的同一线程执行。广播Intent由android框架本身发送。基本上,您正在进行异步调用,并要求Android框架为您发送有序广播。框架将无法发送广播,直到您将控制权交还给它(即:return从您的方法)。如果不将控制权交还给框架,则会立即阻止

    此外,在任何情况下都绝对不能阻止主(UI)线程。您没有指出调用cond.block()的位置,但最好在后台线程中,而不是在主线程中。总的来说,你不应该阻止任何事情。您应该什么也不做,等待回调(或其他什么),并在回调到来时继续处理