Android sendBroadcast - 等待BroadcastReceiver完成

时间:2013-12-18 23:49:36

标签: android android-intent google-cloud-messaging

我在Android应用中使用BroadcastReceiver,其中只包含以下代码:

public BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        GcmIntentService.isHandled = true;
        Toast.makeText(context, "broadcast receiver test", Toast.LENGTH_SHORT).show();
    }
}

我正在使用此接收器来确定我的活动是否正在运行,并在ListView中执行一些更新,而不会通过GcmIntentService生成任何通知。

到目前为止代码很简单,只创建一个toast消息,一旦GcmIntentService.isHandled被调用,我就无法从sendBroadcast中捕获布尔值。

是否可以以任何方式确定我的接收器的代码是否已完成运行。我知道sendBroadcast是一个异步调用,到目前为止我正在使用Thread.sleep(1000)来等待isHandled值,但是如果有更可靠的方法来实现这一点会很好。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您的问题可分为两部分:

1.如何知道如果有接收者实际接收到广播。

2.接收方如何通知服务已处理消息。

通过标准的Intent api似乎很难实现第一个目标,相反我建议您尝试“观察者模式”。

您可以在应用程序中创建一个全局Observable对象,并使您的Activity实现Observer,在onCreate()中注册自己,在onDestory()中注册unRegister。在服务中,您可以检查是否存在一个活动通过countObservers(),然后只是通知它。