2016-01-01 43 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