真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android中廣播消息機(jī)制的實踐是怎樣的

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Android中廣播消息機(jī)制的實踐是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

岳塘網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。

Android系統(tǒng)有一套廣播消息機(jī)制,方便進(jìn)行每個應(yīng)用程序之間的消息通知。而且廣播接受者作為Android四大組件之一,經(jīng)常被使用到。我也接觸到廣播消息機(jī)制,因此有必要對自己所學(xué)的知識梳理整理下。

0x01 廣播分類
  • 標(biāo)準(zhǔn)廣播 
    標(biāo)準(zhǔn)廣播是一種完全異步執(zhí)行的廣播。這種廣播是一種一對多的廣播,效率比較高。當(dāng)廣播被發(fā)出之后,所有的廣播接受者幾乎會在同一時間收到消息。

  • 有序廣播 
    有序廣播是一種同步執(zhí)行的廣播。這種廣播顧名思義是有接受順序的廣播。當(dāng)廣播被發(fā)出之后,只有一個廣播接受者會收到消息。因此,該廣播是一對一的廣播。

0x02 注冊廣播
  • 動態(tài)注冊 
    通過Java代碼注冊。廣播接受者可以自由地對自己感興趣的廣播進(jìn)行注冊,并內(nèi)部處理響應(yīng)廣播的邏輯。這種方式雖然靈活,當(dāng)也有一定的局限性。它要求應(yīng)用程序在運(yùn)行時才能進(jìn)行。

  • 靜態(tài)注冊 
    在AndroidManifest.xml中注冊。這種方式可以在應(yīng)用程序還沒有啟動就注冊接受廣播了。

動態(tài)注冊經(jīng)典代碼Android中廣播消息機(jī)制的實踐是怎樣的
靜態(tài)注冊經(jīng)典代碼 

在AndroidManifest文件Application節(jié)點(diǎn)內(nèi)添加如下代碼:Android中廣播消息機(jī)制的實踐是怎樣的
該廣播接受者名為MyBroadcastReceiver。其有兩個屬性:enabled屬性表示是否啟用這個廣播接受者;exported屬性表示是否允許這個廣播接受者接受本程序以外的廣播。

0x03 靜態(tài)注冊廣播與動態(tài)注冊廣播的區(qū)別
  • 靜態(tài)注冊即使App退出,仍然能接收到廣播

  • 動態(tài)注冊時,當(dāng)Activity退出,就接收不到廣播了

  • 但是靜態(tài)注冊即使App退出,仍然能接收到廣播這種說法自Android 3.1開始有可能不再成立。

說明: 
Android 3.1開始系統(tǒng)在Intent與廣播相關(guān)的flag增加了參數(shù): 
1) FLAG_INCLUDE_STOPPED_PACKAGES:包含已經(jīng)停止的包(停止:即包所在的進(jìn)程已經(jīng)退出) 
2) FLAG_EXCLUDE_STOPPED_PACKAGES:不包含已經(jīng)停止的包 
自Android3.1開始,系統(tǒng)本身增加了對所有App當(dāng)前是否處于運(yùn)行狀態(tài)的跟蹤。在發(fā)送廣播時,不管是什么廣播類型,系統(tǒng)默認(rèn)直接增加了值為FLAG_EXCLUDE_STOPPED_PACKAGES的flag,導(dǎo)致即使是靜態(tài)注冊的廣播接收器,對于其所在進(jìn)程已經(jīng)退出的App,同樣無法接收到廣播。 
因此對于系統(tǒng)廣播,由于是系統(tǒng)內(nèi)部直接發(fā)出的,無法更改此intent的flag值。因此,從3.1開始對于靜態(tài)注冊的接收系統(tǒng)廣播的BroadcastReceiver,如果App進(jìn)程已經(jīng)退出,將不能接收到廣播。 
但是對于自定義的廣播,可以通過覆寫此flag為FLAG_INCLUDE_STOPPED_PACKAGES,使得靜態(tài)注冊的BroadcastReceiver,即使所在App進(jìn)程已經(jīng)退出,也能接收到廣播,并會啟動應(yīng)用進(jìn)程,但此時的BroadcastReceiver是新建的。 
實現(xiàn)代碼為:

Android中廣播消息機(jī)制的實踐是怎樣的
在3.1以前,不少App可能通過靜態(tài)注冊方式監(jiān)聽各種系統(tǒng)廣播,以此進(jìn)行一些業(yè)務(wù)上的處理(如即使App已經(jīng)退出,仍然能接收到,可以啟動service等..)。 

3.1后,靜態(tài)注冊接受廣播方式的改變,將直接導(dǎo)致此類方案不再可行。于是,通過將Service與App本身設(shè)置成不同的進(jìn)程已經(jīng)成為實現(xiàn)此類需求的可行替代方案。

0x04 發(fā)送廣播
  • 發(fā)送標(biāo)準(zhǔn)廣播

Android中廣播消息機(jī)制的實踐是怎樣的

  • 發(fā)送有序廣播

Android中廣播消息機(jī)制的實踐是怎樣的
需要在AndroidManifest文件中通過設(shè)定廣播接受者的intent-filter節(jié)點(diǎn)的priority屬性來確定接受廣播的順序。 

如果想把廣播截斷,可以在onReceive()中調(diào)用abortBoradcast()

0x05 使用本地廣播

為了讓廣播只在應(yīng)用程序中傳遞,這就需要LocalBroadcastManager大顯身手。我們通過代碼來熟悉。

Android中廣播消息機(jī)制的實踐是怎樣的
0x06 廣播的最佳實踐

廣播可以應(yīng)用于強(qiáng)制下線或者被擠下線的邏輯操作

上述就是小編為大家分享的Android中廣播消息機(jī)制的實踐是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:Android中廣播消息機(jī)制的實踐是怎樣的
文章URL:http://weahome.cn/article/gepsgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部