Android應用模組之間通訊模式

來源:互聯網
上載者:User

標籤:

Android應用程式開發中通常需要多個模組進行通訊(相互調用),如果不注意避免耦合,未來功能擴充以及調整會使得代碼十分混亂,容易發生錯誤,並且維護困難。例如,Fragment直接通過(MainActivity)getActivity()的方式來使用其公用成員方法,Fragment和MainActivity之間緊耦合。

 
1 public class FragmentPage{2      ...3      public void onClick(View v){4           ...5           (MainActivity) getActivity().switchTab(MainActivity.RECOMMEND_TAB);6           ...7      }8 }9  

 


首先來看常見的幾種耦合類型:1 簡單資料參數耦合。兩個模組之間僅僅使用基礎資料型別 (Elementary Data Type)來傳遞資訊,這通常來說是可接受的。2 簡單對象耦合。指一個對象建立了另一個對象。在一般情況下這麼做沒有問題,但在某些情況下,如單元測試需要配置網路對象,這就需要依賴注入來解決問題。3 語義耦合。指模組不是以介面的方式直接操作另一個模組。例如上面提到的例子,Fragment將一個Activity引用轉換為其子類來使用。我們應盡量避免語義耦合。 那麼如何避免緊耦合呢?首先可以通過第一介面的方式,讓其他類通過介面的方式與其通訊。 
public class FragmentPage{     private TabSwitcher mTabSwitcher;     ...      public FragmentPage(TabSwitcher switcher){          mTabSwitcher = switcher;     }      public void onClick(View v){          ...          mTabSwitcher (TabSwitcher.RECOMMEND_TAB);          ...     }}

 

 在大型Android應用開發中,我們可能需要通知多個類某個事件的發生,如果單純通過介面的方式實現,將會產生大量的介面,並且需要維護訊息接受者隊列,增加程式複雜度。因此我們需要能夠管理訂閱-發布關係的方案:MessageBus。這種溝通方式是基於訂閱-發布設計模式,發行者發行就緒訊息,是的訂閱了該訊息的類或模組得到通知,使得兩者完全的分離。Android提供了廣播的方式,使得Intent可以在不同的應用程式之間傳遞。但是在傳遞複雜的資料對象時,需要通過實現Serializable或Parcelable介面。當前更流行是使用基於事件的MessageBus,支援自訂事件。相關的EventBus有greenrobot EventBus和square otto。 參考資料:http://vinsol.com/blog/2014/11/04/communication-patterns-for-application-components/

Android應用模組之間通訊模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.