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 更方便一些。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目到了一定阶段会出现一种甜蜜的负担:业务的不断发展与人员的流动性越来越大,代码维护与测试回归流程越来越繁琐。这个...
    fdacc6a1e764阅读 8,396评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,306评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,967评论 25 709
  • “Some Interesting Open Source Projects of Android”这个系列主要是...
    Burjal阅读 7,414评论 2 10
  • 东华凤九续【凤舞九天吾生缘】五 连宋和折颜走后,房间里就剩凤九和东华两人,东华看着脸色苍白的凤九,手不自觉的抚上她...
    纯白羽翼阅读 13,862评论 5 38