安卓:BroadcastManager 有队列吗?

4

我有一个简单的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未打开时广播信息,现在当Activity重新回到前台时,能否接收到已广播的信息? 如果不能,如何维护一个队列来存储Activity未打开时广播的信息?


两个选项:使用“通知”或“本地绑定服务”模式。 - pskink
2个回答

1
本地广播被排队但不被持久化。在你的活动中,onPause()中注销了接收器,因此无法再接收到广播。如果没有接收器,则sendBroadcast()将检查并返回false以指示失败。
如果您希望始终收到通知,请尝试在应用程序级别而不是活动级别注册广播。

1
如果活动没有运行,那么它永远不会接收到广播。你可以这样做:
在发送广播之前/之后检查你的活动是否正在运行,如果它没有运行,则可以存储一个sharedPreference标志,告诉你的活动当它再次运行时要执行任何任务,以便在接收到该广播时执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接