EventBus简单使用教程

来源:互联网 发布:金角大王异步网络框架 编辑:程序博客网 时间:2024/05/22 02:23
大家好!
   首先申明一下,本人是一名初级Android程序员,刚接触EventBus(3.0的用法)有什么说的不对的地方还请大神指点一二。此文章是面向能力不强,对于大神级别就Easy了,废话不多说直接进入正题。
  
   什么是EventBus
     
           EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。

   1.EventBus初步体验
       

    程序运行输出日志如下

    
      EventBus.getDefault().register(this);  意思是注册当前Activity
     EventBus.getDefault().post("Hello EventBus");   意思是寻找当前界面参数为一个的方法并且是被@Subscribe注解,并执行此方法。当执行发送事件post在线程1里执行,那么事件方法也在线程1里执行.
      声明:定义事件方法必须是public,不能有使用修饰符否则会报错。
    2.线程模型模式
     
     在EventBus的事件处理函数中需要指定线程模型,即指定事件处理函数运行所在的线程。EventBus中通常有四种线程模型,分别是PostThread(默认)、MainThread、BackgroundThread与Async。
     
     PostThread:如果使用事件处理函数指定了线程模型为PostThread,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。
    
     MainThread:如果使用事件处理函数指定了线程模型为MainThread,那么不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。
    
     BackgroundThread:如果使用事件处理函数指定了线程模型为BackgroundThread,那么如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
    
     Async:如果使用事件处理函数指定了线程模型为Async,那么无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行。同样,此事件处理函数中禁止进行UI更新操作。
    
     接下来请看示例
     
 
    输出日志如下:
    
    
    发送事件在新的一个线程中执行
   
   
    输出日志如下:
   


    3.事件优先接收proiority使用
   
   


   帮助文档地址:http://greenrobot.org/files/eventbus/javadoc/3.0/
1 0
原创粉丝点击