1、eventbus簡介
eventbus是android事件發布-訂閱匯流排,簡化了活動片段、執行緒、服務等之間的通訊,**更少,質量更好,可以避免由於使用廣播通訊而帶來的諸多不便。具體使用可以參考:我這裡主要是簡單講解eventbus的**邏輯思想,以及自己簡單實現乙個eventbus
2、subscribe 介紹
@subscribe採用執行時註解,且註解只能用在函式上,預設的threadmode為posting
3、threadmode介紹
posting
預設的模式,開銷最小的模式,因為宣告為posting的訂閱者會在發布的同乙個執行緒呼叫,發布者在主線程那麼訂閱者也就在主線程,反之亦,避免了執行緒切換,如果不確定是否有耗時操作,謹慎使用,因為可能是在主線程發布
main
主線程呼叫,視發布執行緒不同處理不同,如果發布者在主線程那麼直接呼叫(非阻塞式),如果發布者不在主線程那麼阻塞式呼叫
main_ordered
和main差不多,主線程呼叫,和main不同的是他保證了post是非阻塞式的(預設走main的非主線程的邏輯,所以可以做到非阻塞)
background
在子執行緒呼叫,如果發布在子執行緒那麼直接在發布執行緒呼叫,如果發布在主線程那麼將開啟乙個子執行緒來呼叫,這個子執行緒是阻塞式的,按順序交付所有事件,所以也不適合做耗時任務,因為多個事件共用這乙個後台執行緒
async
在子執行緒呼叫,總是開啟乙個新的執行緒來呼叫,適用於做耗時任務,比如資料庫操作,網路請求等,不適合做計算任務,會導致開啟大量執行緒
4、register介紹
通過getdefault獲取eventbus例項,這是一條預設的事件匯流排,通過單例模式實現,其建構函式是public的也可以通過new的形式來建立多條事件匯流排
register方法
/**
* 註冊
*/public void register(object subscriber)
}
getsubscriblemethods方法
/**
* 遍歷接收事件的方法
** @param subscriber
* @return
*/private listgetsubscriblemethods(object subscriber)
//物件表示的類或介面宣告的所有方法
method declaredmethods = aclass.getdeclaredmethods();
for (method declaredmethod : declaredmethods)
//獲得方法引數型別
class> parametertypes = declaredmethod.getparametertypes();
//eventbus 是能有乙個引數
if (parametertypes.length != 1)
//符合要求的
threadmode threadmode = annotation.threadmode();
subscriblemethod subscriblemethod = new subscriblemethod(declaredmethod,threadmode,parametertypes[0]);
list.add(subscriblemethod);
}//獲取父類 activity---->baseactivity----->
aclass = aclass.getsuperclass();
}return list;
}
5、post簡介
我這裡就只處理了main、async、posting執行緒之間的切換,遍歷前面register的activity中的所有@subscribe方法,在post方法中根據threadmode執行緒來切換相應的執行緒
* 傳送資料
* @param obj
*/public void post(final object obj) else
});}
break;
//接收方法在子執行緒種情況
case async:
//post方法執行在主線程中
if(looper.mylooper() == looper.getmainlooper())
});} else
break;
case posting:
break;}}}}}
/**
* 執行方法
* @param subscriblemethod
* @param next
* @param obj
*/private void invoke(subscriblemethod subscriblemethod, object next, object obj) catch (illegalacces***ception e) catch (invocationtargetexception e)
}
6、unregister方法
/**
* 取消註冊
*/public void unregister(object subscriber)
}
架構師之路
隨著經驗能力的增長,程式的程式設計習慣也在發生著改變,以下是我個人程式設計習慣的改變。1級 思考一段時間,寫一段 2級 用圖形幫助思考,然後寫 3級 將思考過程寫成注釋,然後再寫 4級 用圖形幫助思考,然後一邊寫注釋,一邊寫 5級 思考過程中增加對不確定技術點的測試。6級 將思考過程寫在記事本裡,將...
架構師之路
方 秒殺系統架構優化思路 分布式id生成器 網際網路架構,如何進行容量設計 執行緒數究竟設多少合理 單點系統架構的可用性與效能優化 關於負載均衡的一切 異構伺服器負載均衡及過載保護 lvs為何不能完全替代dns輪詢 究竟啥才是網際網路架構 高併發 究竟啥才是網際網路架構 高可用 100億資料1萬屬性...
架構師之路
架構的定義 我們來看看軟體架構的一般定義 程式和計算系統軟體體系結構是指系統的乙個或多個結構。該結構包括軟體的構建,構建的外部可見屬性以及它們之間的相互關係。該體系結構不是可操作的軟體。具體來說,這是乙個表示式,它使軟體工程師能夠 分析滿足監管要求的設計有效性。在設計更改相對容易的階段,請考慮架構的...