gpt4 book ai didi

java - 线程通过等待 Intent 来阻止自身发送 Intent

转载 作者:太空宇宙 更新时间:2023-11-04 12:16:05 33 4
gpt4 key购买 nike

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

我的代码看起来像这样:

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() 方法之前实际上并没有发送 Intent (或者至少这是我当前的理论)。这意味着直到超时完成后接收应用程序才会收到 Intent 。

有没有简单的方法可以解决这个问题?我尝试过使用不同的方法来等待返回此 Intent ( sleep 、忙等待、倒计时锁存器、单独的线程等),但我一直遇到同样的问题。

最佳答案

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

此外,在任何情况下都绝对不能阻塞主(UI)线程。您尚未指出在何处调用 cond.block(),但最好在后台线程中而不是在主线程中。一般来说,无论如何你都不应该阻止任何东西。您应该什么也不做,等待回调(或其他),并在回调到来时继续处理。

关于java - 线程通过等待 Intent 来阻止自身发送 Intent ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398634/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com