0

我在 UI 线程中注册了一个 BroadcastReceiver,它在其 onReceive 方法中从 Bundle 中获取一些信息。在我继续我的主线程之前,我需要这些值。

在尝试使用这些值之前,有什么方法可以等待 onReceive 完成?我遇到了时间问题,在我尝试使用它们之后 onReceive 设置值。让线程睡眠不起作用,因为它们在同一个线程上。

在 AsyncTask 中注册接收器并在主线程上调用 wait(),然后在完成后使用 onReceive notify() 是否有意义?

String a = "hi";
IntentFilter filter = new IntentFilter();
filter.addAction(MY_CUSTOM_INTENT);
BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Set the variable values here
        a = "bye";
    }
};
getApplicationContext().registerReceiver(receiver, filter);

// Get the values, I am getting a = "hi" here because the onReceive code has 
// not been reached yet
// How can I guarantee that a = "bye" from this method?
getA();

方法类似于

String getA() {
    return a;
}
4

2 回答 2

2

你似乎把事情复杂化了。根据示例代码很难知道你真正想要的是什么,但是后面的代码registerReceiver()应该只做它需要做的任何其他事情然后返回,而不是等待或希望收到广播。 onReceive()应该包括您想要在此时执行的任何代码(很可能只是一个方法调用,例如updateA("bye").

于 2012-07-11T22:04:20.933 回答
0

好吧,如果您要以任何一种方式阻塞主线程,不妨优雅地完成它。使用 注册接收器AsyncTask,并使用Dialog让用户知道您在做什么或您正在加载某些内容。

于 2012-07-11T22:04:01.757 回答