標籤:今天 turn get 功能 cli android com onresume iss
今天要介紹的是一個Android中使用得比較多的android 事件匯流排 EventBus模式的一個架構Otto。
Otto 官網:http://square.github.io/otto/
一、Android Studio中配置Otto (Eclipse中直接下載jar包匯入)
跟之前介紹的其它的架構一樣,它只須要簡單地在build.gradle中配置以下一行紅色字型就可以
dependencies {
compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])
compile ‘com.android.support:appcompat-v7:19.+‘
//otto 所須要依賴的包
compile ‘com.squareup:otto:+‘
}
二、Otto事件匯流排架構淺析
1、為什麼要用Otto架構?
Otto架構的主要功能是協助我們來減少多個類之間的耦合度的(解耦)。
譬如:一個類A和還有一個類B之間。假設A要操作B中的某個方法。
傳統的方法:A直接調用B對象的該方法(耦合在一起)
事件匯流排機制:A不須要調用B類的方法,而只須要產生並發出 一個“事件通知”, 假設B訂閱了該“事件”
那麼它將會接受到這個事件,做出對應的操作。這樣就被解耦了。
2. Otto架構使用(結合代碼介紹)
Otto架構事實上相對之前的幾個Android開源架構來說。更easy理解。
它主要運用到一個類: Bus類(用於注冊類,登出類。公布事件)
兩個註解: @Subscribe (訂閱) @Produce (生產) 【都是針對“事件”的註解】
為了方便,我這邊沒有使用兩個類來做這個Demo。 只是假設大家要試的話也能夠,只是記住一點,不管是
公布者類 還是 訂閱者類, 都須要用Bus進行類的注冊,還有登出。
否則將沒法被Bus識別,這樣就無法生效了。
以下的Demo, 僅為了讓大家知道“事件”被產生了之後。post出來,全部訂閱了該事件的類都會接到該事件,接受的先後順序,不由我們控制!
public class MyActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); findViewById(R.id.button_change).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { BusProvider.getBusInstance().post(new DataChangedEvent("this is changed String"));//公布事件 } }); } @Override protected void onResume() { super.onResume(); BusProvider.getBusInstance().register(this);//注冊 } @Override protected void onPause() { super.onPause(); BusProvider.getBusInstance().unregister(this);//登出 } @Subscribe //訂閱事件DataChangedEvent public void sayGoodOnEvent(DataChangedEvent event){ Log.e("event", "good"); } @Subscribe //訂閱事件 public void sayBadOnEvent(DataChangedEvent event){ Log.e("event", "bad"); } @Produce //產生事件 public DataChangedEvent produceDataChangedEvent(){ return new DataChangedEvent("this is changed String"); }}
Android Otto架構淺析