Eventbus 开源库的使用


EventBus是一款用用于android上的事件分发/订阅的总线,包含发布者、订阅者、事件和总线。主要用于android中intent,handler等在activity,fragment等组件间传递消息。它极好的将消息的发送者和接收者解耦,方便组件间的通信。
下载地址:
原地址:https://github.com/greenrobot/EventBus
涛哥的地址:https://github.com/kymjs/EventBus (包含部分中文注释)

1、简单使用

首先下载改开源库,导入项目中。接下来就是具体的使用了。如下几个方法:

  • EventBus.getDefault().register(this);注册订阅者
  • EventBus.getDefault().post(“点击按钮,发送消息”);发送消息,传入的是自己的事件类对象
  • 重写 onEventMainThread(Object object) 方法;接收处理消息,这里参数与发送消息的类型一致。
  • 在 onDestroy()中注销当订阅者。

这里仅仅为了说明用法,简单的实现代码如下:

package com.tx.eventbusdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.greenrobot.event.EventBus;

public class MainActivity extends Activity {

    private Button mbtnSend;
    private TextView mtvShowmsg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //当前类注册为事件订阅者
        EventBus.getDefault().register(this);
        mbtnSend = (Button) findViewById(R.id.btn);
        mtvShowmsg = (TextView) findViewById(R.id.show);

        mbtnSend.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送消息
            EventBus.getDefault().post("点击按钮,发送消息");
            }
        });
    }
    //接收处理消息
    public void onEventMainThread(Object object) {  
        mtvShowmsg.setText(object.toString());
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //注销注册
        EventBus.getDefault().unregister(this);
    }
}

效果图:

2、解析实现过程

首先在oncreate方法中注册订阅者,它就会扫描当前类,把onEvent开头的方法记录到map中(Key为方法的参数类型,Value中包含我们的方法);
当子线程执行完毕后,调用post方法,根据其参数查找对应的方法,通过反射来执行相关的方法。

EventBus包含4个ThreadMode:PostThread,MainThread,BackgroundThread,Async。
对应的方法及功能为:
onEventPostThread 在当前发布事件的线程中执行
onEventMainThread 在ui线程中执行
onEventAsync 加入后台任务队列,使用线程池调用。
onEventBackgroundThread 在非UI线程发布的事件,则直接执行;否则,加入后台任务队列,使用线程池一个接一个调用。


文章作者: imtianx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 imtianx !
评论
 上一篇
2015年终总结及android学习路线 2015年终总结及android学习路线
转眼间,一年又过去了,距离毕业也越来越近了。回想过去,感觉自己什么都还不会,顿时感到紧迫感。那么,在接下来的日子里,就要充分利用每分每秒,学习充实自己。我们搞it的就得时刻记着:活到老,学到老。回想这一年,自己独自学习android,从开始
下一篇 
Android Studio 快捷键 Android Studio 快捷键
原官方快捷键:https://www.jetbrains.com/idea/docs/IntelliJIDEA_ReferenceCard.pdfAlt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctr
  目录