《Android進階之光》--事件總線

No1:數據結構

EventBus三要素:函數

1)Event:事件post

2)Subscriber:事件訂閱者ui

3)Publisher:事件發佈者this

No2:spa

EventBus的4種ThreadMode(線程模型):線程

1)POSTING(默認):該事件是在哪一個線程發佈出來的,事件處理函數就會在哪一個線程中運行code

2)MAIN:事件的處理會在UI線程中執行blog

3)BACKGROUND:在新線程或者發佈的子線程中執行,禁止進行UI更新操做事件

4)ASYNC:在新建的子線程中執行,禁止進行UI更新操做

No3:

EventBus源碼解析

EventBus.getDefault()->(單例模式)

new EventBus()->

EventBus(EventBusBuilder)->(建造者模式)

register->

SubscriberMethodFinder.findSubscriberMethods->findUsingInfo->getSubscriberInfo->findUsingReflectionInSingleClass->

subscribe->

...

No4:

otto使用

compile 'com.squareup:otto:1.3.8'
public class BusData{
    public String message;
    public BusData(String message){
        this.message = message;
    }
    public String getMessage(){
        return message;
    }
    public void setMessage(String message){
        this.message = message;
    }
}
public class OttoBus extends Bus{
    private volatile static OttoBus bus;
    private OttoBus(){}
    public static OttoBus getInstance(){
        if(bus == null){
            synchronized(OttoBus.class){
                if(bus==null){
                    bus = new OttoBus();
                }
            }
        }
        return bus;
    }
}
Bus bus = OttoBus.getInstance();
bus.register(this);
bus.unregister(this);

@Subscribe
public void setContent(BusData data){
    tv_message.setText(data.getMessage());
}

OttoBus.getInstance().post(new BusData("劉望舒的博客更新了"));

 

No5:

Otto主要類的功能

1)Produce、Subscribe:發佈者和訂閱者註解類

2)Bus:事件總線類,用來註冊和取消註冊,維護髮布-訂閱模型,並處理事件調度分發

3)HandlerFinder、AnnotatedHandlerFinder:用來查找發佈者和訂閱者

4)EventProducer、EventHandler:分別封裝發佈者和訂閱者的數據結構

相關文章
相關標籤/搜索