iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
自我挑戰組

Android API超初學!!系列 第 20

[Android API] [Day 20] intent (3) Broadcast

今天繼續來講第三個使用intent啟動的元件-broadcast,一樣參考官網

傳送broadcast

  • sendBroadcast (Intent intent)
    把intent傳送給所有有興趣的BroadcastReceiver,為非同步的實作,可即時回傳。Receiver不會回傳任何值,也不能打斷broadcast的傳輸。如果希望receiver有回傳值,需使用sendOrderedBroadcast()。
  • sendOrderedBroadcast()
    把intent傳送給所有有興趣的BroadcastReceiver,但是是按照順序的,會先傳給最有興趣的receiver,再傳給其次有興趣的receiver。一樣是非同步的實作。

Broadcast receiver

  • BroadcastReceiver
    需繼承此class並實作onReceive(Context, Intent)。
  • Broadcast receiver在APP被安裝時就會被註冊了,這樣系統才之後broadcast要傳送給誰,且該啟動哪一個APP。
  • Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)
    註冊一個receiver在main activity的thead上,可接受通過IntentFilter的broadcast intent。
    系統會broadcast一些sticky intent,sticky代表就算廣播已經結束,這些intent還是會一直存在,晚一點才註冊的receiver也可以收到這種sticky intent。
    Receiver會收到所有通過IntentFilter的intent,但只會回傳一個intent,至於是哪一個就是系統隨機選的。
  • LocalBroadcastManager.registerReceiver(BroadcastReceiver, IntentFilter)
    接收local broadcast使用。Local broadcast為單一APP內部使用,效能更快且更安全。

在manifest裡設定receiver

只要在menifest註冊receiver,當有合適的系統broadcast時,APP會自動被啟動來接收此broadcast。
以下是官網提供的範例

<receiver android:name=".我的Receiver"  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>

Intent啟動元件系列大致上就讀到這邊,複習一下,四大基礎元件中的activity、service、broadcast receiver是透過intent啟動,content provider並不是。
/images/emoticon/emoticon43.gif


上一篇
[Android API] [Day 19] intent (2) Service
下一篇
[Android API] [Day 21] Activity lifecycle (1) - onCreate
系列文
Android API超初學!!30

尚未有邦友留言

立即登入留言