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:分別封裝發佈者和訂閱者的數據結構