2015年5月14日 星期四

[Android] BroadcastReceiver - 廣播接收器

BroadcastReceiver 是一個相當常用的類別,它可以用來監聽廣播,並做一些事情。

如果你是熟悉Objective-C的開發者,這東西跟NSNotificationCenter有幾分相似。

大致說明一下如何使用這個類別。

我們可以先創建一個類別,並且繼承BroadcastReceiver這個類別,實作它要我們做的方法。

當有人發送廣播給這個BroadcastReceiver時,就會觸發onReceive方法。

別忘了在AndroidManifest.xml加入這個receiver。

<receiver android:name=".MyBroadcastReceiver"></receiver>

下一步,你必須把這個receiver註冊到背景之中。

此時你有兩種選擇。

第一種,在程式片段裡面註冊。

這種的好處是,你可以在特定的頁面裡面在註冊(register)接收器,而且可以註銷(unregister)你的接收器。

這個程式碼說明了如何註冊及發送廣播,在註銷這個接收器前,它會一直存在背景,

因此你可以在任意的頁面使用sendBroadcast()來發送廣播,在onReceive就會收到。

假如你背景有多個接收器(Receive),它們都會一起收到這個廣播,因此我們可以利用剛才設定的辨識字串來做判斷。

我們將MyBroadcastReceiver稍作修改。

當便是字串相符時,在來做一些事情。

也許這個廣播器我只想要在特定的頁面才會監聽,那我不要的時候只要輸入這個即可註銷。

第二種,在AndroidManifest.xml裡面註冊。

這種做法的好處是它會長時間在背景監聽,但是不能被註銷(unregister),只要安裝這個App就會一直在背景做監聽的動作。

程式碼片段就不需要registerReceiver了,而發送廣播一樣是使用sendBroadcast(),不過若是使用這種方法則不能使用unregisterReceiver來註銷。

簡單的說流程就是,註冊Receive並且設定辨識字串,發送廣播(Broadcast),最後接收器會收到廣播(onReceive),並執行你想做的事情。

有一點要特別注意,onReceive的生命週期大約只有十秒,超過會產生ANR,因此不要在這邊做太複雜的事情,可以啟動一個Service後,靠Service去執行一些較花時間的動作。

關於ANR可以參考官方的說明

http://developer.android.com/training/articles/perf-anr.html

裡面有提到

A BroadcastReceiver hasn't finished executing within 10 seconds.

請多加注意

繼續閱讀

一開機就執行某隻程式 - 使用BroadcastReceiver