2010-08-16 48 views
73

我碰到這個詞附帶的Android文檔在結合定義什麼是便利廣播?

這些都是廣播其數據由系統完成後召開,使客戶能夠快速檢索數據,而不必等待下一個廣播。

這是什麼意思?有人可以用一個特定的例子來闡述它的用法嗎?我相信我們必須要求使用此意圖的許可?爲什麼這樣?

<uses-permission android:name="android.permission.BROADCAST_STICKY"/> - Allows an application to broadcast sticky intents. 

回答

96

請點擊這裏閱讀馬克·墨菲解釋: what is the difference between sendStickyBroadcast and sendBroadcast in Android

這裏是一個可以如何使用粘滯廣播一個抽象的例子:如果你是在一個活動監聽這個廣播

Intent intent = new Intent("some.custom.action"); 
intent.putExtra("some_boolean", true); 
sendStickyBroadcast(intent); 

被凍結(onPause),你可能會錯過實際的事件。這允許您在廣播被觸發後檢查廣播(onResume)。

編輯:更多關於持久廣播...

還檢查了removeStickyBroadcast(Intent),並在API級別5 +,isInitialStickyBroadcast()在接收器的onReceive使用。

希望有所幫助。

+0

嗨,我感到困惑粘滯廣播靜態註冊的廣播。我剛剛在某處看到,在清單文件中註冊廣播和以編程方式註冊的區別僅在於進一步註銷廣播但它停留在那裏,而後者在onPause()方法中註銷廣播。 – 2011-04-25 06:05:46

+0

注意:在大多數情況下,應避免粘性廣播。請參閱[@Nikhil_Katre答案中的鏈接](http://groups.google.com/group/android-developers/browse_thread/thread/f37e3549a5e1be66?pli=1)以獲取更多信息 – gMale 2014-07-05 20:02:48

+0

@Shaista:清單接收器即使在你的應用程序處於休眠狀態,而程序接收器僅在其註冊的應用程序正在運行時纔會響應 – gMale 2014-07-05 20:07:02

20

請注意,粘滯廣播在系統中很重,不鼓勵。請在Android開發人員小組的'Sticky Broadcasts and Concurrency Options'討論中閱讀hackbod的注意事項。

@Shouvik,請指定您正在考慮使用StickyBroadcasts的確切場景。有人可能會提出一種替代解決方案。

+0

+1中指出了粘性廣播的缺點,更不用說如果你的應用程序崩潰了(是的,即使你用try/catch包裝了所有東西並註冊了一個'Thread.setDefaultUncaughtExceptionHandler() '),你堅持在下次調用時必須小心處理的事情。簡而言之,就像SharedPreferences和ContentProvider一樣,它可能很繁瑣而且過於複雜。 – ateiob 2012-08-07 21:50:41

+0

通過「沉重的系統」你的意思是它可以減慢速度?這種放緩何時出現?在應用程序,甚至沒有運行它? Adobe AIR應用程序需要獲得此權限,所以如果編程AIR應用程序,這是您無法避免的。如果您將AIR運行時嵌入到應用程序中,或者讓用戶安裝要求獲得此權限的Adobe AIR運行時,您可以在應用程序中詢問這一點。 – OMA 2012-09-12 14:19:47

+0

下面是我試圖完成的一個場景,並且想知道粘性廣播是否會完成。我需要爲內存中的服務維護狀態,即使服務被終止,並且不觸及任何外部資源(如閃存)。我可以做到這一點沒有粘性,但遇到併發問題更新狀態,如果意圖交付回來。 – Michael 2013-06-02 04:13:32

1

正常的廣播Intent在系統發送和處理後不再可用。如果您使用sendStickyBroadcast(Intent)方法,則Intent是粘性的,這意味着您發送的Intent在廣播完成後仍然保留。

你是指我的博客:enter link description here

+1

我已經添加了您要鏈接到的博客的作者身份的必要信息。你*必須*從現在開始做這件事,否則你的帖子可能被刪除爲垃圾郵件。 – 2012-10-30 13:56:24

7

sendStickyBroadcast()執行被稱爲粘一個sendBroadcast(Intent),即意向您發送入住後各地廣播完畢後,讓其他人可以快速通過的返回值檢索數據registerReceiver(BroadcastReceiver, IntentFilter)。在所有其他方面,這與sendBroadcast(Intent)的行爲相同。通過操作系統發送的粘性廣播的一個示例是ACTION_BATTERY_CHANGED。當您爲該動作致電registerReceiver() - 即使爲空BroadcastReceiver - 您將獲得上次爲該動作播出的意圖。因此,您可以使用它來查找電池的狀態,而無需註冊電池中所有將來的狀態變化。

7

粘性廣播的值是上次廣播的值,當前保存在粘性緩存中。這不是現在收到的廣播的價值。我想你可以說它就像一個瀏覽器cookie,你可以隨時訪問它。粘性廣播現已棄用:

此方法在API級別21中已棄用。不應使用粘滯廣播 。它們不提供安全性(任何人都可以訪問它們),沒有保護(任何人都可以修改它們)以及其他許多問題。 推薦的模式是使用非粘性廣播來報告 的某些內容發生了變化,另一種機制是應用程序根據需要檢索當前值。

+1

鏈接到引用的文檔將非常有幫助。 – 2017-09-19 10:06:35

+0

不記得引用的文檔。不知道這是可憐的禮儀,但現在我可以清楚地看到爲什麼。 Def從某處複製並粘貼。 – 2017-09-20 16:44:33