18

Android應用程序的良好體系結構是怎樣的?是否所有的「工作/業務邏輯」都是在後臺服務中完成的,並且Activity只與服務進行通信以從某處(本地/遠程)查詢/獲取數據?Android體系結構設計 - 如何做到這一點?

您是否將該活動稱爲真正的Android服務的「服務」實現?或者做一個POJO-Singleton(可能使用後臺線程)。或者在您的活動中實例化後臺線程以查找耗時的操作(查詢web服務)。

你如何以正確的方式抽象你的數據訪問?你會用ContentProvider來訪問/抽象你的數據嗎?如何/從哪裏查詢?活動?服務? ..?我試圖尋找一個好的應用程序架構設計,但我只發現了Android架構的外觀,而不是Android應用程序的外觀。

那麼你對此有何看法? Android應用程序的哪些組件應該互相通信以確保最佳的可擴展性/封裝性......?

回答

15

這個問題沒有人回答。良好的OO設計不是特定於Android的。我會說規則是 - 如果框架爲您提供適合您的用例的高級對象(例如適用於Android的服務),請使用它。如果你發現自己使用框架免費獲得相同的東西的POJO實現,請使用框架。

就分離問題而言,這是標準的面向對象的東西。不要把任何東西放在你的Activity類中,這不是Activity的工作。使用Activity需要的方法和屬性來填充Activity,但這並不是Activity的工作,這很糟糕 - 會讓您的Activity的意圖難以理解。

我通常將東西分成我的應用程序中的子包。

  • com.myname.myproject.app - 基類,全球應用功能
  • com.myname.myproject.net - 網絡的東西,網絡相關的utils的
  • com.myname.myproject.data - DB助手,提供商等
  • com.myname.myproject.model - 對象模型

至於通信瓦特ithin你的應用程序...

我總是有一個自定義的應用程序類,我在清單中註冊。這樣,當我擁有需要成爲「單一實例」的控制器和幫助器時,我不必執行所有那些瘋狂的線程安全單例任務......我只保留一個全局副本。

RoboGuice是一個依賴注入框架,使得它更容易完成...絕對值得研究。如果您感興趣,Google Group for RoboGuice非常棒,並且始終充滿了可以基本回答您需要的任何內容的框架創建者。

至於應用程序內的通信,我用我的單實例控制器類和狀態類,以保持狀態,做普通任務,我通常使用BroadcastIntents到回從服務

+0

爲什麼你使用任何特殊的理由溝通活動BroadcastIntents從服務和不處理程序傳回活動? – KL4711

+2

不是特別的。我的活動可以在onPause中註銷他們的廣播意圖接收器,這樣我的服務就可以廣播信息,並且只有活動的Activity纔會收到它,如果它註冊了接收器。我喜歡那種不連貫的性質。如果處理程序可以完成相同的操作,而不參考服務中的活動,那麼我完全不知道它。 – Rich

+0

@Rich:既然已經有一段時間了,你已經回答了!你有沒有發現任何在這段時間內詳細解釋這個架構事件的在線資源? –