Android:BroadcastManager有队列吗?

时间:2016-01-01 07:25:47

标签: android

我有一个简单的BroadcastReceiver,我在我的Activity的onResume方法中设置。

@Override
protected void onResume() {
    super.onResume();
    LocalBroadcastManager.getInstance(this).registerReceiver(mNotificationReceiver, new IntentFilter(QuickstartPreferences.NEW_NOTIFICATION));

}

我在onPause上取消注册接收器:

@Override
protected void onPause() {
   LocalBroadcastManager.getInstance(this).unregisterReceiver(mNotificationReceiver);
}

我有一个后台服务,将广播消息发送到:

Intent newNotification = new Intent(QuickstartPreferences.NEW_NOTIFICATION);
newNotification.putExtra("title", data.getString("title"));
LocalBroadcastManager.getInstance(this).sendBroadcast(newNotification);

我的问题是,如果后台服务在未打开活动时广播消息,现在当活动恢复时,它是否能够接收广播的消息?如果不是,如何在Activity未打开时维护队列来存储广播的消息?

2 个答案:

答案 0 :(得分:1)

LocalBroadcast已排队但未保留。在您的活动 onPause()中,您注册了未注册的接收器,因此您无法接收进一步的广播。 sendBroadcast()将检查接收器,如果没有接收器,它将返回false以指示失败。

如果您希望始终获得通知,请尝试在应用程序级别而不是活动级别注册广播。

答案 1 :(得分:1)

如果活动没有运行,那么它将永远不会收到它。你能做的是:

在发送广播之前/之后检查您的activityrunning,如果它没有运行,那么您可以存储一个sharedPreference标志,告诉您的活动何时再次运行当receives broadcast时它必须做的任何任务。