歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android Otto框架淺析

今天要介紹的是一個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開源框架來說,更容易理解。

它主要運用到一個類: 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相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved