我在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值,但是如果有更可靠的方法来实现这一点会很好。
有什么想法吗?
答案 0 :(得分:2)
您的问题可分为两部分:
1.如何知道如果有接收者实际接收到广播。
2.接收方如何通知服务已处理消息。
通过标准的Intent api似乎很难实现第一个目标,相反我建议您尝试“观察者模式”。
您可以在应用程序中创建一个全局Observable对象,并使您的Activity实现Observer,在onCreate()中注册自己,在onDestory()中注册unRegister。在服务中,您可以检查是否存在一个活动通过countObservers(),然后只是通知它。