BroadcastReceiver

一、BroadcastReceiver是什麼?

1、四大組件之一:廣播(通知消息)接收器 –要想到在Manifest中註冊
2、系統使用了很多廣播:通知時間改變(鬧鐘纔會響)、電池電量變低、拍攝了照片、改變了語言;
3、沒有用戶界面。

只負責向所有在Manifest裏的註冊者發送廣播,需要這個廣播的人去接收它。

二、BroadcastReceiver怎麼使用?

兩種註冊方式

BroadcastReceiver的兩種註冊方式
1、靜態註冊

       <receiver android:name=".TestBroadcastReceiver">
            <intent-filter>
                <action android:name="com.example.test.broadcast"/>
            </intent-filter>
        </receiver>

2、動態註冊
在onStart方法中註冊,在onStop方法中反註冊

    @Override
    protected void onStart() {
        super.onStart();

        /* 動態註冊廣播*/
        //根據action裏的android:name過濾廣播。
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(COM_EXAMPLE_TEST_BROADCAST);
        registerReceiver(mTestBroadcastReceiver, intentFilter);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(mTestBroadcastReceiver);
    }

3、兩者的區別:靜態註冊的廣播一直有效,動態註冊的廣播需要反註冊掉,不然註冊在內存裏,會不斷的消耗內存,所以常用動態註冊。

如何接收廣播onReceive方法

MainActivity類

   @Override
    public void onClick(View view) {
        /* 發送廣播 */
        Intent intent = new Intent(MainActivity.this,TestBroadcastReceiver.class);
        //只發給action爲COM_EXAMPLE_TEST_BROADCAST
        intent.setAction(COM_EXAMPLE_TEST_BROADCAST);
        intent.putExtra("toast", "this is a toast of broadcast");
        sendBroadcast(intent);
    }

TestBroadcastReceiver類

public class TestBroadcastReceiver extends BroadcastReceiver {

    /*    接收廣播、處理數據   */
    @Override
    public void onReceive(Context context, Intent intent) {

        if (intent != null){
            //判斷字符串是否相等TextUtils.equals().
            if (TextUtils.equals(intent.getAction(),MainActivity.COM_EXAMPLE_TEST_BROADCAST)){
                String toastString = intent.getStringExtra("toast");
                Toast.makeText(context,toastString,Toast.LENGTH_SHORT).show();
            }
        }
    }
}

如果在onReceive方法中執行耗時操作會怎樣?如何解決?
同Activity、Service一樣,new Thread進程。

三、幾種類型?

1、Normal broadcasts
2、Ordered broadcasts
3、二者有什麼區別?
正常廣播,沒有順序,一下子向所有註冊者發送廣播;有序廣播,廣播有自己的順序,根據順序發送廣播。有點像Service和IntentService。
4、Local broadcasts:LocalBroadcastManager 廣播不是在系統中而是在某應用中,這樣速度會很快;android系統發廣播時所有的應用都能收到,消耗手機性能、廣播延時。

四、BroadcastReceiver的生命週期

Register – SendBroadcast – onReceive – unRegister。

總結:
1、是什麼?
2、怎麼用?
3、兩種註冊方式?
4、幾種類型?
5、生命週期

注意事項: 1、適當的用、不要濫用 (消耗性能、廣播延時、廣播被丟棄等。)
2、可以用LocalBroadcast

該用callback時用callback,要麼用LocalBroadcast。

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