Register Receiver in Manifest or Component(ex:Service、Activity)
Aug 9, 2017 · 2 min read
前言
最近在公司開發輸入法,有一項需求是,
當系統語言改變時,
輸入法也會更改預設的語言。
這個需求其實很簡單,用個Receiver就可以搞定這件事情。
問題
但很神奇的是,我被咱家的QC回報,這個功能有BUG,
BUG內容是,系統語言改完,要過數秒後,
輸入法的語言才跟著被改變,太慢了!!
原因
後來發現原因,是因為我註冊Receiver時,
是直接在Manifest上註冊的,
並非透過元件(component)的生命週期之中註冊,
上網查了資料,與經過測試以後,發現這兩種註冊方式,
是有很大的差異的。
解答
- Manifest上註冊:當App被安裝後,會告知系統,有這麼一隻App,他有需要監聽這些事件的需求。接下來,如果這隻App沒有跑起來,那麼系統會預設建立一個Process,用來幫忙監聽廣播,但這種方式收到廣播的時間會比較長,反應較慢。
- 從元件上,用programming的方式去註冊:當App被執行時,只會在開發者選擇註冊或註銷的時機,去註冊或註銷。這種方式通常用在,App對於這個廣播訊息,並沒有需求要隨時監聽,或者是不想佔用載具的效能、增加載具負擔。這種方式收到廣播的時間一般會比較短,反應較快。
參考資料