EventBus最简单的使用

原创 2016年05月31日 17:28:09

1简介

 我眼中的EventBus :就是在一个activity修改另一个activity的UI控件,主线程的事件逻辑的一个工具类;


官方解释:    简化了组件之间的通信           将事件发送方和接收方               执行与活动、碎片和后台线程              避免了复杂的和容易出错的依赖性和生命周期问题
很快,专门为高性能优化            很小(< 50 k jar)                  拥有先进的功能,如交付线程,用户优先级等。         

2.demo使用效果图

        这里面是最简单的效果,但是功能却是介绍到了,


3项目集成EventBus的步骤

正常的实现步骤 :

1、下载EventBus

2、让自己的项目以来EventBus

3、自定义一个事件(不需要继承任何类),通常我比较喜欢定义一个Message类

4、定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:

       a、onEvent   它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会 在同一个线程中执行

    b、onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线 程中修改UI

  c、onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事 件发起函数在子线程执行,那么回调函数就在这个子线程执行。

    d、onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。

当然了 ,初始化是少不了的
开始初始化:
oncreate()中 EventBus.getDefault().register(this);
在activity的onStop ()或者onDestroy()中注销掉:EventBus.getDefault().unregister(this);
activity的启动方式最好改为: android:launchMode="singleTop"
最后就是调用上面的a~d中的一种方法就可以;
本demo中使用的是b方法:
看下代码:

  (1) 初始化
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvNum = (TextView) findViewById(R.id.num);
        //初始化Event
        EventBus.getDefault().register(this);
    }
(2)消息的接受处理(分了两种情况,相当于传入的不同的事件吧)
   
    /** 接收到事件后更新详情,post()传入的是Integer 型*/
    public void onEventMainThread(Integer i) {
    	//SpannableStringBuilder 用法见http://blog.csdn.net/u013424496/article/details/51351541
    	SpannableStringBuilder ss=new SpannableStringBuilder(i+"     onEventMainThread(int i)");
    	ss.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    	tvNum.setText(ss);
    }
    /** 接收到事件后更新详情,post()传入的是String 型 */
    public void onEventMainThread(String i ){
    	tvNum.setText(i);
    	DownActivity.setBtn("呵呵,你会变么");
    }
(3)注销 (这里当然也是可以在onPause中注销的,不过一般不这么做,毕竟程序还没有退出,这个界面还是有可能接受到消息的)
  @Override
    protected void onDestroy() {
    	super.onDestroy();
    	EventBus.getDefault().unregister(this);
    }

(4)发送消息(不在MainActivity这个类中了)
UpActivity中
Integer i = MainActivity.num++;
EventBus.getDefault().post(i);
DownActivity中
EventBus.getDefault().post("再次点击第二个按钮改变");


好了大体就是这样,这个可以用到夜间模式,或者在app中切换语言的时候中,就不会出现闪屏的问题;


最后附上demo下载地址:http://www.oschina.net/code/snippet_2702417_56703




注:对了EventBus  的实现方式:https://github.com/greenrobot/EventBus

as 的依赖:

Gradle:

    compile 'org.greenrobot:eventbus:3.0.0'

Maven:

<dependency>
    <groupId>org.greenrobot</groupId>
    <artifactId>eventbus</artifactId>
    <version>3.0.0</version>
</dependency>
当然还有一种
Otto 一个基于Guava的增强的事件总线




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

EventBus用法详解与常见异常

EventBus使用起来十分简单,大体为已下几步: (1)自定义一个类,可以是空类,如下。当然可以是空类,一般不会,应用中总要传点什么数据吧,是吧。public class EventUtil { ...

EventBus3.0 使用详解(一)

*.EventBus的github地址:https://github.com/greenrobot/EventBus *.EventBus的官方网站:http://greenrobot.org/eve...

30分钟学会EventBus3.0详解(一)(引入和初始化EventBus3.0)(by星空武哥)

转载声明原创地址:http://blog.csdn.net/lsyz0021/article/details/51985307 30分钟学会EventBus3.0详解(一)(引入和初始化Event...

EventBus 最简易的使用方式

呃,要跟上时代的步伐,所以来学习一下EventBus(话说好像现在学也已经算是跟不上了。。嘛。。不管了,一步一步往前追,应该还来得及吧)。看了网上一些的关于eventBus的文章,上来就叽里呱啦一大堆...

EventBus使用详解(一)——初步使用EventBus

前言:

写给同事的EventBus使用指南(一)

EventBus好处不用多说,直接告诉大家怎么使用好了

EventBus3 简单使用及注意点

EventBus3 简单使用及注意点

EventBus_粘性事件简单使用

MainActivity package com.example.aaaa; import android.content.Intent; import android.os.Bundle; im...

GreenDao配置以及使用

在项目build最上面添加 apply plugin: 'org.greenrobot.greendao' 然后在项目build里在buildTypes里面配置greendao greenda...

EventBus使用简单示例

  • 2015年09月17日 10:48
  • 5.99MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EventBus最简单的使用
举报原因:
原因补充:

(最多只允许输入30个字)