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
沒有留言:
張貼留言