2012-12-12 84 views
0

我正在寫一個顯示「日本傳統時間」(簡稱JTT)的應用程序。有幾個組件(通知,小部件,應用程序本身,警報)都使用相同的數據 - 當前的JTT。ContentProvider或Service?

我現在的版本使用一個單一的服務,做所有的計算和使用一個處理程序來通知大家關於「滴答」,模仿ACTION_TIME_TICK

然而,隨着報警我也需要有一種方法來「平時」翻譯成JTT,反之亦然。該計算是相當CPU重(這是所有基於日出和日落),因此我喜歡有它全部在一個地方完成,然後緩存(計算的東西知道日出和日落時間是不重)。

所以我有幾個方法可以做到,現在:

  • 保持完整的服務
    • 並使用綁定來請求我需要的數據。它實際上已經在一種情況下完成的,似乎有點麻煩,因爲我要處理異步響應
  • 移動到內容提供商
    • 並利用內容的觀察員,而不是廣播
    • 或者從供應商
    • 發送廣播消息,
  • 結合兩種方式
    • 使用內容提供商,以計算服務,這反過來將它播出時需要的數據ED

這將是更好?也許別的東西?

回答

0

我堅持「只是服務」 - 我發現了粘滯廣播,它實際上覆蓋了我與普通廣播的問題(必須在註冊後但在獲得第一個「剔號」之前從服務請求最新數據)以及在我需要實際服務連接的情況下,使我得到的案例少得多。

0

內容供應商對於結構化數據,因此它並不真正適合你的使用情況。不確定'異步響應'是什麼意思?調用遠程服務通常就像本地函數調用一樣,它會在完成時阻塞並返回一個值。如果你必須通知多個組件,廣播就是要走的路。探索使用LocalBroadcast如果所有組件都在同一個進程(檢查Android的支持庫源),或設置其權限,以確保其他應用程序無法得到它,如果你需要發送一個全系統的(常規)之一。

+0

現在,我使用'Messenger'與服務進行通信,所以從綁定的服務請求數據創建一個郵件併發送,然後讓我自己'Handler'響應。 – aragaer

+0

但我會考慮同步通信,感謝這個想法。 – aragaer

+0

啊,我明白了。我正在考慮一個基於AIDL的服務,您只需在本地存根上調用方法,從而獲得同步調用。 –