首先我们可以大概的猜测一下这个代码字面意思再带着问题去看 首先是获取一个PostingThreadState类(这个应该是类似于一个线程的控制类吧 用来调度线程的) 然后返回一个事件队列的Object类然后通过判断标识符判断设置线程及flag 如果取消 则 跑出异常然后判断eventQueue.isEmpty()是否为空 如果不为空 则一直发送 知道跳出循环 最后重设属性参数
我们首先可以看下currentPostingThreadState.get()
ThreadLocal这个类是用来保证线程安全的一个对象 具体可以百度 然后我们拿到返回的eventQueue 然后开始进行判断 首先判断是否是主线程通过isMainThread();方法 然后判断是否取消 取消则抛异常 然后再进入postSingleEvent(eventQueue.remove(0), postingState); 这个方法中
这一块是关于父类的判断 我们可以进入postSingleEventForEventType 这个方法
首先是获得subscription 这个列表(假如他传的是一个字符串 这个event参数就是文本 eventClass就是String.Class以此类推)获取其中的event和subscription 然后通过postToSubscription 执行 我们接着进入其中看下
首先是一个Switch方法判断传过来的参数判断应该通过什么方法去传送数据(POSTING 和发布消息处于同一个线程等 其他的 可以自己去看下)它这里 主要是通过invokeSubscriber (一个NATIVE方法) 去执行