[Android實作問題] These two register difference there?
(小K, 2011-12-22 21:32)
1樓
Hello Jarey,
請教一個問題用androidmanifest去註冊一個receiver的和用程式碼去註冊一個receiver這之間是否有差異呢?
Thank you
小K
(Jarey, 2011-12-23 13:10)
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簡訊廣播,接收網路狀態是否有變化廣播...等等。
(小K, 2011-12-23 20:55)
4樓
thanks Jarey