2013-10-21 95 views
0

是否有任何使用BroadcastReceiver的應用程序用於除跨應用程序通信以外的其他用途?何時使用BroadcastReceiver進行非跨應用程序通信?

閱讀documentation後,它看起來像是針對跨應用程序通信,但也提到了將它們與LocalBroadcastManager一起使用的想法。我還讀了this post,它解決了廣播接收機的一般用法。似乎沒有明確指出爲什麼將廣播和接收器用於除跨應用程序通信以外的任何其他應用程序是有用的。

它與它們的異步特性有什麼關係,或者它們只是用於將某些處理移出主要活動?

澄清:我想交叉應用這個詞太籠統了。我正在考慮內置動作,如

android.hardware.action.NEW_PICTURE 

將來自應用程序。我想知道的是:什麼時候在我的應用程序中使用BroadcastReceiver進行通信是有用的 - 我想這會縮小到自定義意圖操作/類別。對不起,如果我問這是混淆的方式。我剛剛剛剛開始使用Android進行編程,但我仍然不太瞭解操作系統。

回答

0

正如它在引用的帖子中引用的那樣:「廣播接收器是響應系統廣播通知的組件,許多廣播都來自系統。

因此,他們是在「惡補」系統廣播,例如,當設備啓動時,有用的,當電池電量變化,當你的Wi-Fi已打開,等

就個人而言,我每當設備收到短信時,我都使用BroadcastReceiver啓動我的應用程序。在我的情況下,這是首選,因爲我的應用程序不需要在收到文本消息時運行。一旦收到,系統將用SMS_RECEIVED動作廣播一個意圖。我的BroadcastReceiver組件,註冊接受這種特殊類型的廣播,將被通知,然後可以根據需要作出反應。在我的情況下,它啓動一個活動來通知用戶該短信,並選擇一個特定的回覆短信。

這只是一個具體的例子。還有很多其他的廣播是由系統傳輸的,您的Receiver可以獲得。更多示例請參考linkpost

澄清:當你想無意圖的應用組件之間的通信,而簡單的方式被廣播的全系統

甲LocalBroadcastManager是在實例優選的。知道這一點,當你傳遞的信息只被你的應用程序使用時,你會想走這條路。 LocalBroadcastManager更高效,通常比使用IBinder接口更簡單,並且可以確保信息不會離開您的應用。

舉一個例子,假設你有一個在後臺運行的服務來跟蹤和記錄一些不斷變化的數據;讓我們說你的電池電量。該服務可以在沒有用戶交互的情況下自行運行,隨着更改而將電池級別保存到磁盤。當您開始查看所述數據時,它會使用LocalBroadcastManager註冊接收方來接受服務正在發送的信息,並實時更新活動的UI以反映此情況。由於沒有其他應用程序需要來自您的服務的信息,因此最好這樣做比傳播任何其他應用程序可以訪問的意圖。

綜上所述,使用LocalBroadcastManager是:

  1. 更高效。
  2. 更安全。
  3. 更簡單。
+0

感謝您的回覆;我相信你提到了我所問的問題,但現在我想我所問的並不是我想要的答案。我已更新我的問題以澄清我的意圖。你可以看一下嗎? – Mack

相關問題