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 楼答案
调用
sendOrderedBroadcast()
时,广播不会立即执行,也不会由发出调用的同一线程执行。广播Intent
由android框架本身发送。基本上,您正在进行异步调用,并要求Android框架为您发送有序广播。框架将无法发送广播,直到您将控制权交还给它(即:return
从您的方法)。如果不将控制权交还给框架,则会立即阻止此外,在任何情况下都绝对不能阻止主(UI)线程。您没有指出调用
cond.block()
的位置,但最好在后台线程中,而不是在主线程中。总的来说,你不应该阻止任何事情。您应该什么也不做,等待回调(或其他什么),并在回调到来时继续处理