2012-06-21 58 views
0

我在創建允許在不同時間添加/刪除多個監聽器的非IPC服務時遇到了一些麻煩,例如,我希望能夠聯繫服務並「訂閱」其活動任何時候,或「取消訂閱」。該服務每隔一會醒來一次,並向所有訂閱的聽衆發送一個事件。有多個聽衆的android服務

我一直在看計算器的例子,谷歌搜索等,特別是我發現這裏類似的東西: android restful api

在該示例中,建議是使用ResultReceiver作爲來自服務的回調。但是在這種方法中,這並不意味着服務只能通知作爲第一個意圖的一部分發送給它的偵聽器(即,無論何時我都不能添加/刪除偵聽器)?

另外,在那個例子中,如果由於某種原因操作系統被操作系統銷燬了活動會發生什麼情況,但是該服務仍然有對該監聽器的引用並嘗試調用它?聽衆會嘗試對不再存在的活動執行一些操作,對嗎?

也許我失去了一些東西......如果可能的話我會很感激的一些輸入..

TNX

回答

1

首先,「睡覺」服務是Android的反模式。如果您需要定期執行某些操作,請使用AlarmManager啓動您的服務。其次,該服務可以隨時重新啓動,因此您不能依賴於「訂閱」,因爲您在其中保留對其他組件(主要是活動)的引用。如果您需要向多個活動發送通知,請使用廣播接收器。活動可以靜態註冊(使用AndroidManifest.xml),或動態註冊(使用代碼)。

+0

感謝您的回覆,我不是指一個沉睡的服務 - 我指的是當前正在執行一些網絡活動,這可能需要一分鐘左右的業務,並在該時間之後,它需要提高一些事件,希望有一些活動能夠抓住。這一切都發生在同一個應用程序內部,而不是跨應用程序......我的「缺失的鏈接」是如何在那一分鐘內根據需要添加/刪除監聽器。顯然,該服務不應該直接引用監聽器,而應該在其間有一些「消息代理」。其他(類似於JEE消息隊列) –

+0

您可以使用registerReceiver()註冊廣播監聽器。 Android OS是消息代理,它負責將事件傳遞給正確的接收者。 http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver,android.content.IntentFilter) –

+0

感謝,我是新到Android,ü給我的步驟正確的方向:) –