Android Broadcast

Broadcast

廣播介紹&使用

  1. 廣播是android中各個模塊通信的一種方法显拜。有發(fā)送方,接收方掌唾。

  2. 發(fā)廣播的方式如下代碼:

             Intent intent  = new Intent();
             intent.setAction("com.xxx.just_for_test");
             sendBroadcast(intent);
    

3.廣播的接受有兩種方式(1)靜態(tài)注冊(2)動態(tài)注冊
? ? ? ?(1)動態(tài)注冊

    IntentFilter filter = new IntentFilter();
    filter.addAction("com.xxx.just_for_test");
    this.registerReceiver(mReceiver, filter);

    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
         public void onReceive(Context context, Intent intent) {
         Log.d("TAG", "onReceive: ");
    }
};

? ? ? ?onReceive中就是對接受到這個廣播的處理镇匀,注意動態(tài)注冊的在最后要進(jìn)行unRegisterReceiver()跟activity的生命周期保證一致。
? ? ? ?(2)靜態(tài)注冊
? ? ? ? 首先要在manifest中注冊:

  <receiver android:name=".TestReceiver"
     android:enabled="true" //表示可以接受到信息饺鹃。
     android:exported="true">//表示可以接收到外部APK的信息
    <intent-filter>
        <action android:name="com.xxx.just_for_test"/>
    </intent-filter>
    </receiver>

? ? ? ? 注意action 要對應(yīng),然后新起一個類

public class TestReceiver  extends BroadcastReceiver {
    @Override
      public void onReceive(Context context, Intent intent) {
      Log.d("TAG","onReceive");
  }

}
? ? ? ?這樣兩個廣播的方式就都寫出來了间雀,簡單的用法就是這樣悔详。唯一需要注意的就是onReceive方法中是在主線程執(zhí)行的,10S干不完事情就會報ANR惹挟。
? ? ? ?例外用內(nèi)部類實(shí)現(xiàn)也是可以的茄螃,但是要使用靜態(tài)內(nèi)部類,首席實(shí)例化xml的時候會去實(shí)例化你這個內(nèi)部類匪煌,非靜態(tài)內(nèi)部類的實(shí)現(xiàn)要通過父類责蝠,因?yàn)楦割悰]有實(shí)例化 所以會一直報錯has no zero argument constructor党巾。設(shè)置成靜態(tài)內(nèi)部類就沒有這個問題萎庭。
? ? ? ?這里可以mark一下,java基礎(chǔ)齿拂。

廣播分類

  1. 普通廣播
    ? ? ? ?普通廣播就是我們調(diào)用的sendBroadcast(),只要注冊了action的Receiver(不同的APP也可以)都可以接到驳规,但是接到的這個的過程是異步的,誰先誰后不知道署海。

  2. 有序廣播
    ? ? ? ?就是考慮一個優(yōu)先級吗购。取值范圍-1000~1000越大優(yōu)先級越高 靜態(tài):

           <intent-filter android:priority="100">
             <action android:name="com.xxx.just_for_test"/>
           </intent-filter>
    

動態(tài):

        IntentFilter filter = new IntentFilter();
        filter.addAction("com.xxx.just_for_test");
        filter.setPriority(100);

會按照設(shè)置的Priority來先后調(diào)用注冊的receiver医男。高等級的receiver可以調(diào)用abortBroadcast();來阻止下面的接收到這個廣播。

  1. 本地廣播
    這個其實(shí)就是為了不讓其他APP跟我們這邊APP進(jìn)行通信處理捻勉。使用方法如下
public static void sendLocalBroadcast(Intent intent) {
    LocalBroadcastManager.getInstance(getInstance()).sendBroadcast(intent);
}
public static void registerLocalReceiver(BroadcastReceiver receiver, IntentFilter filter) {
    LocalBroadcastManager.getInstance(getInstance()).registerReceiver(receiver, filter);
}
public static void unregisterLocalReceiver(BroadcastReceiver receiver) {
    LocalBroadcastManager.getInstance(getInstance()).unregisterReceiver(receiver);
}
  1. Sticky廣播
    ? ? ? ? 現(xiàn)已經(jīng)廢棄镀梭。

使用廣播遇到的問題

? ? ? ? 其實(shí)廣播的分類應(yīng)該還有一個系統(tǒng)廣播,這個廣播由系統(tǒng)發(fā)出踱启,比如開機(jī)廣播报账。之所以沒在上面進(jìn)行介紹,是因?yàn)檫@個廣播在android 8.0新特性中有了一些新的規(guī)定埠偿。部分通過靜態(tài)注冊的系統(tǒng)廣播不再可以進(jìn)行接受透罢。因?yàn)殪o態(tài)廣播的注冊一直是在后臺消耗一定資源的。通過動態(tài)注冊可以解決這個問題冠蒋。 當(dāng)然還有發(fā)送的intent設(shè)置FLAG_RECEIVER_EXCLUDE_BACKGROUND羽圃;時候也不能接收到廣播,8.0之后intent設(shè)置值的時候需要帶上

setComponent.png

貼圖片是為了更好的看懂兩個參數(shù)是什么抖剿。
? ? ? ?查看一下RECEIVER_EXCLUDE_BACKGROUND朽寞,發(fā)現(xiàn)對應(yīng)的Flag:FLAG_RECEIVER_INCLUDE_BACKGROUND = 0x01000000;即我們可以通過intent.addFlags(0x01000000);也可以進(jìn)行突破限制 實(shí)現(xiàn)廣播的正常使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斩郎,一起剝皮案震驚了整個濱河市愁憔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孽拷,老刑警劉巖吨掌,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脓恕,居然都是意外死亡膜宋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門炼幔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秋茫,“玉大人,你說我怎么就攤上這事乃秀「刂” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵跺讯,是天一觀的道長枢贿。 經(jīng)常有香客問我,道長刀脏,這世上最難降的妖魔是什么局荚? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上耀态,老公的妹妹穿的比我還像新娘轮傍。我一直安慰自己,他們只是感情好首装,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布创夜。 她就那樣靜靜地躺著,像睡著了一般仙逻。 火紅的嫁衣襯著肌膚如雪挥下。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天桨醋,我揣著相機(jī)與錄音棚瘟,去河邊找鬼。 笑死喜最,一個胖子當(dāng)著我的面吹牛偎蘸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瞬内,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼迷雪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虫蝶?” 一聲冷哼從身側(cè)響起章咧,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎能真,沒想到半個月后赁严,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粉铐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年疼约,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝙泼。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡程剥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汤踏,到底是詐尸還是另有隱情织鲸,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布溪胶,位于F島的核電站搂擦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏载荔。R本人自食惡果不足惜盾饮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一采桃、第九天 我趴在偏房一處隱蔽的房頂上張望懒熙。 院中可真熱鬧丘损,春花似錦、人聲如沸工扎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肢娘。三九已至呈础,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橱健,已是汗流浹背而钞。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拘荡,地道東北人臼节。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像珊皿,于是被迫代替她去往敵國和親网缝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 本文基于 AOSP android-9.0.0_r2 Android中的廣播機(jī)制是通過底層binder來傳遞Int...
    wbo4958閱讀 1,248評論 1 2
  • 參考承香墨影的兩篇博客Android--廣播BroadcastReceiverAndroid--攔截系統(tǒng)Broad...
    合肥黑閱讀 1,999評論 2 11
  • Android Broadcast Broadcast使用場景 Android廣播分為兩個方面:廣播發(fā)送者和廣播接...
    Showdy閱讀 2,860評論 0 8
  • 前言:本文所寫的是博主的個人見解蟋定,如有錯誤或者不恰當(dāng)之處粉臊,歡迎私信博主,加以改正驶兜! 原文鏈接扼仲,demo鏈接 廣播簡...
    PassersHowe閱讀 3,440評論 0 9
  • 廣播的發(fā)送:通過intent; 廣播的接收:通過廣播接收者(Broadcast Receiver) 廣播的分類:無...
    EvanPoison閱讀 265評論 0 0