知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
[Android實作問題] These two register difference there?
1樓
Hello Jarey,

請教一個問題用androidmanifest去註冊一個receiver的和用程式碼去註冊一個receiver這之間是否有差異呢?

Thank you
小K

3樓
android的receiver可以利用androidmanifest.xml檔中註明Interfilter去過濾出你想要收到的broadcast訊息,

也可以利用程式碼撰的方式在應用程式中註冊,因為Broadcast是有自己的生命週期,而它的週期是很短暫的,

當有訊息時會被OS呼叫onreceiver函式,該函式一跑完這個receiver 就結束了.同時Receiver元件也沒有UI。

兩者之間的差別在於你的應用方式,如果今天你的Receiver元件希望與某一個Activity元件(或Service)的生命

週期結合在一起,那麼你就該使用程式碼註冊的方式,在activity的onStart去註冊,onStop去結束註冊,那麼

就只有用戶目前去開到這頁Activity時這個Receiver元件才會開始生效去收到廣播,這通常是用在Activity與內部

的Service元件兩者之間互相通訊時使用,例如我把GPS監聽事件註冊寫在Service元件上,然後定期的在廣播

GPS定位資料出來,你就可以在Activity頁面中去註冊接收自己發出的廣播,利用廣播資料去做UI的互動,當用

戶離開了該Receiver元件後,UI頁面沒有了,你也不需要做UI互動顯示,自然也不需要收廣播播了。


而將Receiver的註冊寫在androidmanifest.xml中的優點是,該Receiver註冊的Action是在安裝APP軟體時就

註冊進去了,所以只要系統中有該廣播資料出現,無論你是否執行過該APP,你的Receiver元件都會OS呼叫起來

收到廣播資料,Receiver的註冊就與任何其它Activity(Servcier)元件都無關,是屬於一安裝時就註冊了,通常這

類的Receiver會用來接收處理OS系統所發出的廣播,例如接收SMS簡訊廣播,接收網路狀態是否有變化廣播...等等。
4樓
thanks Jarey