廣播(基礎)

  1. 標準廣播和有序廣播
    標準廣播大致是這樣的流程,發送之後,所有的廣播接收器同時接收到
    這裏寫圖片描述
    有序廣播大致是這樣,中間的一次接受廣播,中間的接收器,接收之後,可以選擇繼續往下傳播或者截斷

    這裏寫圖片描述

    兩者的編碼區別在於:

    1.發送廣播的時候 標準廣播(sendBroadcast(intent)) 有序廣播(sendOrderedBroadcast(intent,null))

    2.有序廣播在intent-filter中可設置android:priority=”n” n越大優先級越大 別問我一樣大會怎樣,我沒試過 捂臉

    3.有序廣播可想傳播鏈截斷(abortBroadcast()),截斷之後不可繼續下傳

  2. 廣播接收器的靜態註冊和動態註冊

    註冊之前需要先創建一個接收器,也就是自定義一個;
    as裏面,左鍵選中java文件夾,右鍵菜單裏面的new–>other,裏面可以直接創建接收器(Broadcast Receiver),完美生成一個廣播接收器,當然你也可以自己新建個object,在extends BroadcastReceiver ,再添加onReceive()方法函數,當然,我感覺這樣真的是很麻煩,但是如果你真的是基礎不行的話,可以做兩遍,浪浪

    靜態註冊就是在清單文件裏註冊,這個廣播的生命週期是隨着應用的啓動和銷燬而啓動銷燬的,

              <receiver
                android:name=".MyReceiver"
                android:enabled="true" //是否啓用這個廣播
                android:exported="true" //是否接受本程序之廣播
              ></receiver>

​ android:enabled=”true” //是否啓用這個廣播

​ android:exported=”true” //是否接受本程序之廣播 一般來講如果不是接受系統的廣播,不需要暴露,否則可能導致安全的操作,被別人破解

可以添加intent-filter action類似之前activity的

<receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.hehehe" />
            </intent-filter>
        </receiver>

​ 廣播先創建,再註冊,做完之後我們就可以發送廣播驗證一下

Intent intent=new Intent("android.intent.action.hehehe");
sendBroadcast(intent);

動態註冊 還是需要先創建 BroadcastReceiver ,假如是使用as自動創建的話,是會自動靜態註冊的,

這裏寫圖片描述

注意英文提示,add到manifest,假如是中文的話,我各個開發工具肯定提高我不少的開銷效率,但是真的下漢化版的,反而會被廣大同行,瞧不起,太 low,我也有這樣的感覺,崇洋媚外啊,我也是

一般情況下都是在activity生命週期中註冊,當然其他組件也可以,

public class MainActivity extends AppCompatActivity {
    private MyReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myReceiver = new MyReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.hehehe");
        registerReceiver(myReceiver, intentFilter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
}

這就是動態註冊,發送廣播驗證一下,ok

  1. 本地廣播

    LocalBroadcastManager 本地廣播,就和其他應用沒關係了,他們都接受不到,也發送不過來

    具體的編碼需要注意的地方也就是,編碼的發送廣播,註冊廣播,銷燬廣播的時候,使用LocalBroadcastManager調用

    這裏寫圖片描述

發佈了70 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章