天天看點

EventBus的使用,注意事項,錯誤分析

一,概述

Android optimized event bus that simplifies communication between 
Activities, Fragments, Threads, Services, etc. Less code, better 
quality. 
           

上面這幾行英文是給github官方給出的說法,那麼我們翻譯過來是大緻就是說:

EventBus是一款針對Android優化的釋出/訂閱事件總線,簡化了安卓事件之間的通信,可以替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅,品質更好。

下載下傳EventBus的連結

https://github.com/greenrobot/EventBus

二,基本用法

這個圖檔可以很清晰的說明EventBus的執行流程,沒當我不明白的時候,都會在看看這個流程圖
EventBus的使用,注意事項,錯誤分析

EventBus in 3 steps

使用一共分為三個步驟

//定義一個事件
Define events:
public class MessageEvent { /* Additional fields if needed */ }

//準備一個訂閱者
Prepare subscribers
Register your subscriber (in your onCreate or in a constructor):
eventBus.register(this);

Declare your subscribing method:
@Subscribe
public void onEvent(AnyEventType event) {/* Do something */};

//釋出一個事件
Post events:
eventBus.post(event);
This getting started guide shows these 3 steps in more detail
           
那麼這個開源架構的使用也是很簡單的,一共分為以上三個步驟,隻要我們一步一步來,肯定是沒有問題的,那麼我們就先來做一個小的demo來試試,任何大的項目都是小的知識點累加成的,隻要我們掌握了每一個知識點,才能做好每一個大的項目。

三,執行個體

1 自定義一個類,可以是空的
public class TextEvent {

public String msg;

    public TextEvent(String msg) {
        this.msg = msg;
    }
}
           
2 準備一個訂閱者 發送者,為了簡單起見,我隻是在主方法中定義了一個按鈕
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //設定按鈕的點選事件
    findViewById(R.id.bt_post).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            TextEvent event = new TextEvent("Hello World");
            EventBus.getDefault().post(event);
        }
    });
    EventBus.getDefault().register(this);
}

/**
 * Declare your subscribing method
 * 聲明自己的訂閱方法
 *
 * @param event
 */
    @Subscribe 
    public void onEvent(TextEvent event) {
        Toast.makeText(this, event.msg, Toast.LENGTH_SHORT).show();
    }
}
           
簡單來講上面代碼都做了些什麼事情,首先在主方法中點選按鈕之後,會釋出一個事件,這個事件會調用下面我們聲明的訂閱方法,然後會在螢幕中彈出一個我們定義的土司

四,錯誤

我們在第一次使用的時候,很可能會出現像下面這個的報錯,那麼是為什麼呢?

仔細看這個錯誤,提示我們需要在回調的方法中加上一個注解

那麼我們千萬不能疏忽了,要在我們最後的回調方法上面加上那句注解,@Subscribe

05-06 23:38:38.622 9391-9391/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.itheima.demo, PID: 9391
java.lang.RuntimeException: Unable to start activity ComponentInfo
{com.itheima.demo/com.itheima.demo.MainActivity}: 
org.greenrobot.eventbus.EventBusException: Subscriber class 
com.itheima.demo.MainActivity and its super classes have no public 
methods with the @Subscribe annotation
           

ps :

好了,那麼這就是EventBus的簡單實用,每當我們學習使用一個新的開源架構的時候,一定要從最簡單的開始,看着官方給出的文檔,一步一步來,肯定是可以搞定的。