如何在同一个线程中等待onReceive完成?

时间:2012-07-11 18:53:52

标签: android broadcastreceiver

我在UI线程中注册了一个BroadcastReceiver,它在onSeceive方法中从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();

where方法类似于

String getA() {
    return a;
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

好吧,如果您要阻止主线程,也可以优雅地做到这一点。使用AsyncTask注册接收器,并使用Dialog让用户知道你是什么正在做或正在装货。