Evenbus是一个开源插件,可以帮我们在app里面进行数据传递,传递的对象为Object,就是说可以传输任何对象,但是一般为了拓展性和维护性,我们都用来传输Bean类型。

这个插件最重要的是注册和反注册,因为只是注册了而不反注册,很容易引起内存泄漏,所以在不用的时候,必须把它反注册掉,值得一提的是注册和反注册必须成对出现在一个activity或者fragment里面,注意生命周期的配对使用,例如activity的话,

  1. onCreate对应onDestroyonStart对应onStop
  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. EventBus.getDefault().register(this);//注册
  6.  
  7. }
  8.  
  9. @Override
  10. protected void onDestroy() {
  11. super.onDestroy();
  12. EventBus.getDefault().unregister(this);//反注册
  13. }

下面说说用法

1.引入依赖,在app的build。gradle里面添加  compile 'org.greenrobot:eventbus:3.1.1'

2.我们以传输Bean对象为例子讲解,所以要定义一个Bean对象

  1. public class TestBean {
  2. private String s;
  3.  
  4. public String getS() {
  5. return s;
  6. }
  7.  
  8. public void setS(String s) {
  9. this.s = s;
  10. }
  11. }

3.在需要接收对象的页面进行注册和反注册

  1. public class MainActivity extends AppCompatActivity {
  2. private Button bt;
  3. private TextView tv;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. EventBus.getDefault().register(this);
  9. bt = (Button) findViewById(R.id.bt);
  10. tv = (TextView) findViewById(R.id.tv);
  11. bt.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14. tu2ac();
  15. }
  16. });
  17. }
  18. private void tu2ac() {
  19. Intent intent = new Intent(this, Main2Activity.class);
  20. startActivity(intent);
  21. }
  22. @Override
  23. protected void onDestroy() {
  24. super.onDestroy();
  25. EventBus.getDefault().unregister(this);
  26. }
  27. @Subscribe(threadMode = ThreadMode.MAIN)//在一般情况下,evenbus都是在主线程进行传输的,所以在传输过程中不要做耗时操作,可以在do something里面用异步线程做想做的事
  28. public void onMessageEvent(TestBean testBean) {
    //do something
  29. tv.setText(testBean.getS());
  30.  
  31. }
  32. }

4.在发送对象的页面

  1. public class Main2Activity extends AppCompatActivity {
  2. private Button bt02;
  3. private TestBean mTestBean = new TestBean();
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main2);
  9. mTestBean.setS("2222");
  10. bt02 = (Button) findViewById(R.id.bt02);
  11. bt02.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v) {
  14. EventBus.getDefault().post(mTestBean);//发送就直接发送,没有需要注意的事项,注意一处发送可以多处接受
  15. }
  16. });
  17. }
  18. }

5.下面再贴上布局

  1. //这个是接受收对象的页面布局
    <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. xmlns:app="http://schemas.android.com/apk/res-auto"
  5. xmlns:tools="http://schemas.android.com/tools"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. android:orientation="vertical"
  9. tools:context="com.moumou.evenbustest.MainActivity">
  10. <Button
  11. android:id="@+id/bt"
  12. android:text="过去"
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"/>
  15. <TextView
  16. android:id="@+id/tv"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content"/>
  19. </LinearLayout>
  20.  
  21. //这个是发送对象的页面布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.moumou.evenbustest.Main2Activity">
<Button
android:id="@+id/bt02"
android:text="发送"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

  1.  

Evenbus简单用法的更多相关文章

  1. CATransition(os开发之画面切换) 的简单用法

    CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...

  2. jquery.validate.js 表单验证简单用法

    引入jquery.validate.js插件以及Jquery,在最后加上这个插件的方法名来引用.$('form').validate(); <!DOCTYPE html PUBLIC " ...

  3. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  4. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  5. Oracle的substr函数简单用法

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  6. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  7. TransactionScope简单用法

    记录TransactionScope简单用法,示例如下: void Test() { using (TransactionScope scope = new TransactionScope()) { ...

  8. WPF之Treeview控件简单用法

    TreeView:表示显示在树结构中分层数据具有项目可展开和折叠的控件 TreeView 的内容是可以包含丰富内容的 TreeViewItem 控件,如 Button 和 Image 控件.TreeV ...

  9. listActivity和ExpandableListActivity的简单用法

    http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...

随机推荐

  1. weat!!团队

    摘要: 团队名称:weat!! 团队成员:刘波 崔和杰 简介: 刘波:性别男,爱好:动漫,徒步旅行.在组内负责程序编写这一部分. 优点:认真负责,不懂就会去问. 崔和杰:性别男,爱好:篮球.在组内负责 ...

  2. pyquery 安装

    取得网页源代码,导入pyquery库 pip3 install pyquery       如果报错的话:python安装pyquery报错error: 'libxml/xmlversion.h' f ...

  3. linux下禁用SELinux

    http://chenzhou123520.iteye.com/blog/1313582 如何开启或关闭SELinux RedHat的 /etc/sysconfig/selinux 在新版本中的Red ...

  4. java通过poi编写excel文件

    public String writeExcel(List<MedicalWhiteList> MedicalWhiteList) { if(MedicalWhiteList == nul ...

  5. 基于MATLAB的腐蚀膨胀算法实现

    本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像 ...

  6. floyd算法之最小环问题

    最小环问题:都比较容易得到从u 到 v 经过中间某一些结点的最短路,但是我们得确保回来的时候,不能经过那些结点,这样我们就需要改一下floyd算法了 进而我们想到用Floyd算法.我们知道,Floyd ...

  7. bootstrap阶段测验【问题】

  8. 封装了三个对TMemoryStream操作的函数,大牛莫笑

    // TMemoryStream 转化为string字符串 function MemoryStreamToString(M: TMemoryStream): AnsiString; begin Set ...

  9. CentOS6.5分区与文件系统

    1 分区介绍 inux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a—z)),硬盘主分区最 ...

  10. TaskCreationOptions.LongRunning 运行比可用线程数更多的任务

    最近在学WebSocket,服务端需要监听多个WebSocket客户端发送的消息. 开始的解决方法是每个WebSocket客户端都添加一个线程进行监听,代码如下: /// <summary> ...