我有一个简单的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未打开时维护队列来存储广播的消息?
答案 0 :(得分:1)
LocalBroadcast已排队但未保留。在您的活动 onPause()中,您注册了未注册的接收器,因此您无法接收进一步的广播。 sendBroadcast()将检查接收器,如果没有接收器,它将返回false以指示失败。
如果您希望始终获得通知,请尝试在应用程序级别而不是活动级别注册广播。
答案 1 :(得分:1)
如果活动没有运行,那么它将永远不会收到它。你能做的是:
在发送广播之前/之后检查您的activity
是running
,如果它没有运行,那么您可以存储一个sharedPreference
标志,告诉您的活动何时再次运行当receives
broadcast
时它必须做的任何任务。