• android---EventBus的简单使用(一)


    是什么:

      就是用来发消息通信的

    怎么用:

    • 定义事件:(消息体)

        

    public class MessageEvent { /* Additional fields if needed */ }
    
    • 准备订阅者:声明并注释您的订阅方法,可选择指定一个线程模式

      @Subscribe(threadMode = ThreadMode.MAIN)  
      public void onMessageEvent(MessageEvent event) {/* Do something */};
      //粘性事件
      @Subscribe (threadMode = ThreadMode.ASYNC,sticky = true)
      public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){
          Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 执行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name);
          
      }
      

        

    • 线程模式选择:
      •   ThreadMode:POSTING  订阅者将在发布事件的同一线程中调用。这是默认值
      •   ThreadMode:MAIN     订阅者在主线程中执行 
      •        ThreadMode:MAIN_ORDERED   按照发布顺序执行
      •        ThreadMode: BACKGROUND   如果发布在主线程,则新开一个线程,
      •        ThreadMode: ASYNC  新的独立线程中执行
      •  
    • 注册和注销您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册
     @Override
     public void onStart() {
         super.onStart();
         EventBus.getDefault().register(this);
     }
    
     @Override
     public void onStop() {
         super.onStop();
         EventBus.getDefault().unregister(this);
     }
    • 发布活动:
      EventBus.getDefault().post(myMessageEvent);
      EventBus.getDefault().postSticky(myMessageEvent);

        

    举例:

    1. 添加依赖:
      implementation 'org.greenrobot:eventbus:3.1.1'
      

       

    2. 创建一个事件,(消息体)
      public class MyMessageEvent {
          public String name = "";
      
          public MyMessageEvent(String name) {
              this.name = name;
          }
      }
      

        

    3. 注册,注销订阅者,按照生命周期来
      @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_my_event_bus);
              EventBus.getDefault().register(this);
          }
      
          @Override
          protected void onDestroy() {
              super.onDestroy();
              EventBus.getDefault().unregister(this);
          }
      

        

    4. 准备订阅者
      @Subscribe (threadMode = ThreadMode.MAIN)
      public void myEventBusMessage(MyMessageEvent myMessageEvent){
            Log.e("EventBus","name = "+myMessageEvent.name);
             
      }

      //粘性事件
      @Subscribe (threadMode = ThreadMode.ASYNC,sticky = true)
      public void myEventBusMessageASYNC(MyMessageEvent myMessageEvent){
      Log.e("EventBus","MyEventBusActivity2 ThreadMode.ASYNC 执行Thread = "+Thread.currentThread().getName()+"------------"+myMessageEvent.name);

      }

        

    5. 发布活动
      MyMessageEvent myMessageEvent = new MyMessageEvent("1");
       EventBus.getDefault().post(myMessageEvent);
      //粘性事件
      EventBus.getDefault().postSticky(myMessageEvent);

        

    参考:

    http://greenrobot.org/eventbus/documentation/

     

  • 相关阅读:
    【MVC】过滤器
    【C#】开发可以可视化操作的windows服务
    【JS】导出table到excel,同时兼容FF和IE
    【.Net】文件并发(日志处理)--队列--Redis+Log4Net
    【.Net】从.NET平台调用Win32 API
    『录』最全前端资源汇集
    $.ajax()方法详解
    mvc的视图中显示DataTable的方法
    C# 对XML基本操作总结
    Ninject简介
  • 原文地址:https://www.cnblogs.com/xkd-/p/10757569.html
Copyright © 2020-2023  润新知