Exemplo n.º 1
0
 /**
  * postSingleEventForEventType 函数在subscriptionsByEventType查找该事件订阅者订阅者队列,调用 postToSubscription
  * 函数向每个订阅者发布事件。
  *
  * @param event
  * @param postingState
  * @param eventClass
  * @return
  */
 private boolean postSingleEventForEventType(
     Object event, PostingThreadState postingState, Class<?> eventClass) {
   CopyOnWriteArrayList<Subscription> subscriptions;
   synchronized (this) {
     subscriptions = subscriptionsByEventType.get(eventClass);
   }
   if (subscriptions != null && !subscriptions.isEmpty()) {
     for (Subscription subscription : subscriptions) {
       postingState.event = event;
       postingState.subscription = subscription;
       boolean aborted = false;
       try {
         postToSubscription(subscription, event, postingState.isMainThread);
         aborted = postingState.canceled;
       } finally {
         postingState.event = null;
         postingState.subscription = null;
         postingState.canceled = false;
       }
       if (aborted) {
         break;
       }
     }
     return true;
   }
   return false;
 }
Exemplo n.º 2
0
 private void checkPostStickyEventToSubscription(
     Subscription newSubscription, Object stickyEvent) {
   if (stickyEvent != null) {
     // If the subscriber is trying to abort the event, it will fail (event is not tracked in
     // posting state)
     // --> Strange corner case, which we don't take care of here.
     postToSubscription(newSubscription, stickyEvent, Looper.getMainLooper() == Looper.myLooper());
   }
 }