2016-01-01 39 views
4

我有一个简单的BroadcastReceiver,我在我的Activity的onResume方法中设置。Android:BroadcastManager是否有队列?

@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

两种选择:使用'Notification's或“local bound Service”模式 – pskink

回答

1

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

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

1

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

检查,如果你的activityrunning前/你发送的广播后,如果没有,那么在运行,你可以存储sharedPreference标志,告诉你的活动时,再次运行到这样做有什么任务即broadcast