otto初体验

在这之前用过EventBus,发现到处都可以postEvent,事件的订阅者也可以指定线程。支持不同线程,先后台互相传递消息。

最近使用了下otto,模式都是一样的,eventbus3.0之前采用的是方法名前缀的方式来注册订阅者。3.0之后也采取了跟otto一样的注解的方式来注册。基本方法都是register,unregister,post

不同点在于otto更轻量级,默认的使用范围,是UI线程。mainlooper。

Bus 类里实例化了一个ThreadEnforcer enforcer 用来检验线程的。

默认的构造方法Bus();使用的是ThreadEnforcer.MAIN作为enforcer.

ThreadEnforcer MAIN=new ThreadEnforcer() {

@Override public void enforce(Bus bus) {

   if(Looper.myLooper() != Looper.getMainLooper()) {

      throw new IllegalStateException("Event bus "+ bus +" accessed from non-main thread "+ Looper.myLooper());

   }

  }

};

如果想在非UI线程调用,可以使用public Bus(ThreadEnforcer enforcer) 构造方法,传入ThreadEnforcer.ANY

需要注意的是,订阅者执收到消息时跟发布者是在同一个线程。如果有对UI的操作还需要读者自己定义handler处理。

如果考虑的哦啊跨线程传递,最好还是考虑使用EventBus 更方便一些。

你可能感兴趣的:(otto初体验)