事件总线EventBus

什么是事件总线管理?java

  1. 将事件放到队列里,用于管理和分发;
  2. 保证应用的各个部分之间高效的通讯及数据,事件分发;
  3. 模块间解耦;

什么是EventBus?android

  1. EventBus是发布/订阅的事件总线。EventBus模式-也被称为MessageBus或者发布者/订阅者(publisher/subcriber)模式——能够让两个组件相互通讯,可是他们之间并不相互知晓。
  2. 基于事件总线管理/订阅/分发模式的。事件响应有更多的线程选择,EventBus能够向不一样的线程中发布事件。EventBus支持Sticky Event。
  3. 使用时须要先注册订阅,而后向订阅者分发消息数据便可。包含4个成分:发布者,订阅者,事件,总线。订阅者能够订阅多个事件,发布者能够发布任何事件,发布者同时能够也是订阅者。分订阅、注册、发布、取消注册等步骤。git

    以下图:
    这里写图片描述github

EventBus.getDefault().register(this); //注册事件 EventBus.getDefault().post(object); //发送事件 EventBus.getDefault().unregister(this); //取消事件 

//订阅处理事件的方法和区别markdown

//UI线程执行 public void onEventMainThread() {} //当前发布事件的线程执行 public void onEventPostThread() {} //若是当前非UI线程,则直接调用;若是是UI线程,则将任务加入到后台的一个队列 public void onEventBackgroundThread() {} //加入后台任务队列,使用线程池调用 public void onEventAsyncThread() {}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

取消注册:app

EventBus.getDefault().unregister(this); 
  • 1

写个例子:单击一个按钮发送消息,事件在哪里注册了,就在哪里接收:ide

首先在build.gradle里加入一个依赖库:compile ‘org.greenrobot:eventbus:3.0.0’布局

package com.example.zhiwenyan.eventbus; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; public class MainActivity extends AppCompatActivity { private Button btn; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); //注册事件 btn = (Button) findViewById(R.id.button); textView = (TextView)findViewById(R.id.textView); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { MyEvent myEvent = new MyEvent(); myEvent.setType("1"); myEvent.setContent("我是发送的内容"); //发送事件 EventBus.getDefault().post(myEvent); } }); } //处理事件 @Subscribe public void onEventMainThread(MyEvent myEvent) { if (myEvent.getType().equals("1")) { textView.setText(myEvent.getContent()); } } @Override protected void onDestroy() { super.onDestroy(); //取消注册 EventBus.getDefault().unregister(this); } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 2
  • 25

在OnCreate()里注册了一个事件 EventBus.getDefault().register(this);this表明在当前的类注册,单击一个按钮时发布一个事件EventBus.getDefault().post(myEvent); myEvent事件类的MyEvent的对象。而后在UI线程执行处理了这个事件;最后在onDestory摧毁了这个事件post

事件类:学习

public class MyEvent { private String type; private String content; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

布局文件就不复制了:一个Button、一个TextView很简单;

事件分发总库EventBus,小编正在学习这个,写一篇博客,帮助你们入门一下;小编认为学习这个,先把流程搞明白,而后在再去理解,多写几个例子(好比在Fragment之间传递信息,后台到前台传递消息等等),最后呢能够深刻的研究一下里面的源码(正在研究中….);

你们也能够在github上去看一下:https://github.com/greenrobot/EventBus

相关文章
相关标签/搜索