首先我們可以大概的猜測一下這個代碼字面意思再帶著問題去看? 首先是獲取一個PostingThreadState類(這個應該是類似于一個線程的控制類吧 用來調(diào)度線程的)? 然后返回一個事件隊列的Object類然后通過判斷標識符判斷設置線程及flag? 如果取消 則?跑出異常然后判斷eventQueue.isEmpty()是否為空 如果不為空 則一直發(fā)送 知道跳出循環(huán) 最后重設屬性參數(shù)
我們首先可以看下currentPostingThreadState.get()
ThreadLocal這個類是用來保證線程安全的一個對象 具體可以百度 然后我們拿到返回的eventQueue 然后開始進行判斷 首先判斷是否是主線程通過isMainThread();方法? 然后判斷是否取消 取消則拋異常 然后再進入postSingleEvent(eventQueue.remove(0), postingState); 這個方法中?
這一塊是關(guān)于父類的判斷 我們可以進入postSingleEventForEventType 這個方法
首先是獲得subscription? 這個列表(假如他傳的是一個字符串? 這個event參數(shù)就是文本? eventClass就是String.Class以此類推)獲取其中的event和subscription 然后通過postToSubscription? 執(zhí)行 我們接著進入其中看下
首先是一個Switch方法判斷傳過來的參數(shù)判斷應該通過什么方法去傳送數(shù)據(jù)(POSTING 和發(fā)布消息處于同一個線程等 其他的 可以自己去看下)它這里 主要是通過invokeSubscriber (一個NATIVE方法) 去執(zhí)行??