淺析Android Broadcast(廣播)

一,什么是廣播?

廣播, 做為Android的四大組件之一,被用于發(fā)送和接收,來自系統(tǒng)或其它app的消息。其設計原理,是基于觀察者模式來設計的,即先訂閱,后接收。廣播消息,并不受限于某一個單一進程。因此,它可以用于跨進程間的通信,在多個App之間傳遞消息。

二,廣播的分類。

根據(jù)廣播的訂閱(定義)方式和生命周期,我們可以將廣播歸納為2種類型,即靜態(tài)廣播與動態(tài)廣播。

  • 靜態(tài)廣播
    靜態(tài)注冊的廣播,在App被安裝后,就自動被系統(tǒng)的PackageManager注冊保存起來。這樣,哪怕你的app,沒有在運行,你的app也可以接收到廣播。訂閱這樣一個廣播,我們需要分2步實現(xiàn)。第1步,是創(chuàng)建一個類,繼承自BroadcastReceiver。第2步,是在配置清單文件(AndroidManifest.xml)里面,進行配置第1步所創(chuàng)建的類。
  1. 創(chuàng)建繼承自BroadcastReceiver的類,代碼如下:
class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
           // 當接收到廣播時,這個方法會被調用,intent參數(shù),包含了廣播所附帶的數(shù)據(jù)。
    }
}
  1. 在AndroidManifest.xml里面,配置剛剛定義的類。這個<receiver></receiver>標簽,必須放在<application></application>標簽中間,與<activity/>標簽同層級。
<receiver android:name=".MyBroadcastReceiver"  android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
    </intent-filter>
</receiver>

  • 動態(tài)廣播
    動態(tài)廣播,是指通過代碼,來動態(tài)訂閱。每一個動態(tài)廣播,都綁定一個上下文Context,要么是某個Activity的,要么是Application的。它的特點是,生命周期只局限于某個頁面的生命周期,亦或是App的生命周期。當綁定廣播的Activity或App被銷毀后,就無法再接收廣播。同樣地,訂閱這樣一個廣播,我們需要分2步走。第1步,是創(chuàng)建一個類,繼承自BroadcastReceiver,熟悉的配方,一樣的方式。第2步,創(chuàng)建該類的實例。
  1. 創(chuàng)建繼承自BroadcastReceiver的類,代碼如下:
class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
           // 當接收到廣播時,這個方法會被調用,intent參數(shù),包含了廣播所附帶的數(shù)據(jù)。
    }
}
  1. 創(chuàng)建BroadcastReceiver子類的實例,代碼如下:
val br: BroadcastReceiver = MyBroadcastReceiver()
  1. 創(chuàng)建IntentFilter,添加訂閱事件,并注冊廣播。
val filter = IntentFilter()
// 添加要訂閱的廣播事件
filter.addAction(Intent.ACTION_SCREEN_OFF)
// 注冊廣播
registerReceiver(br, filter)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容