2011-02-22 28 views
2

我從一個標準的本地android服務開始,並使用Binders和Listeners進行通信。然後:我開始注意到處理方向改變時遇到的一些嚴重問題,所以我決定跳過整個活頁夾的事情,並且僅僅使用包含所有需要傳遞的數據/命令的廣播意圖(並使用startService)。Android - 從粘合劑到廣播

我的問題是:使用這種方法時,我必須注意哪些缺陷?

有沒有什麼缺點?

回答

1

如果您正在支持API Level 4及以上版本,請使用setPackage()使您的「廣播」成爲「窄播」 - 將廣播保留在您的應用中。默認情況下,廣播是真正的廣播,適用於所有應用程序,這可能會或可能不會對您的數據有好處。

不要忘記註銷您的BroadcastReceiver(即,不要註冊並忘記它)。同時,如果服務結束並且活動很久沒有結束(例如BACK按鈕),您需要考慮該怎麼做。一種方法是使用有低優先級清單註冊的接收器的有序廣播,如果沒有活動處理廣播,將會產生Notification,這說明我的意思。

你可能會考慮一個Messenger而不是廣播方式,因爲它本質上是一個「窄播」,可能是一個smidge較少的開銷,並且不能泄露。不過,我仍在努力通過配置更改來使用它。

+0

「不能泄漏」 - 我的方法怎麼會泄漏? – yydl

+1

@Joseph:如果你通過'registerReceiver()'註冊'BroadcastReceiver'並且不註銷它,我不確定它是否會自動清除。你肯定可以通過這種方式泄露'LocationListener'和'SensorEventListener'。 – CommonsWare