EventBus 的使用

eventbus和观察者是一样的,需要先导入eventbus的架包。

基本的使用步骤就是如下4步,

  1. 定义事件类型:
    `public class MyEvent {}`
  2. 定义事件处理方法:
    `public void onEventMainThread`
  3. 注册订阅者:
    `EventBus.getDefault().register(this)`
  4. 发送事件:
    `EventBus.getDefault().post(new MyEvent())`

EventBus包含4个ThreadMode:PostThread,MainThread,BackgroundThread,Async

MainThread我们已经不陌生了;我们已经使用过。

具体的用法,极其简单,方法名为:onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync即可

具体什么区别呢?

onEventMainThread代表这个方法会在UI线程执行

onEventPostThread代表这个方法会在当前发布事件的线程执行

BackgroundThread这个方法,如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。

Async 加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个。

1、具体实现:

一个事件的基类

public class BaseEvent {
}

2、具体事件的类型

package com.example.mydemo;

public class FavorEvent extends BaseEvent {

private int did;
    private String msg = "";

public FavorEvent() {

}

public FavorEvent(int did, String msg) {
        this.did = did;
        this.setMsg(msg);
    }

public int getDid() {
        return did;
    }

public void setDid(int did) {
        this.did = did;
    }

public String getMsg() {
        return msg;
    }

public void setMsg(String msg) {
        this.msg = msg;
    }

@Override
    public String toString() {
        return "FavorEvent [did=" + did + ", msg=" + msg + "]";
    }

}

3、注册eventbus事件,其中必须在写onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync其中一个方法,因为这是事件的回调,eventbus会自动检测是否类中存在四种方法中的其中一种。

package com.example.mydemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import de.greenrobot.event.EventBus;

public class MainActivity extends Activity {

private String TAG = "MainActivity";

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
        findViewById(R.id.ttt).setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,
                        MainActivity2.class);
                // TODO Auto-generated method stub
                startActivity(intent);
            }
        });
    
    }

public void onEventMainThread(FavorEvent event) {
        Log.e(TAG, "onEventMainThread" + "event=" + event.toString());
        ((TextView) findViewById(R.id.ttt)).setText("发布啦");

}

@Override
    protected void onDestroy() {
        // TODO Auto-generated method stub

EventBus.getDefault().unregister(this);
        super.onDestroy();
    }

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

4、在MainActivity2类中通知类型为favorite类型的事件调用四种onEvent方法中的一种(我们已经在MainActivity类中写好了)

package com.example.mydemo;

import de.greenrobot.event.EventBus;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class MainActivity2 extends Activity {

private String TAG = "MainActivity2";

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);

//        EventBus.getDefault().register(this);

findViewById(R.id.rrr).setOnClickListener(new OnClickListener() {

@Override
            public void onClick(View v) {
                Log.e(TAG, "onEventMainThread");//通知注册类型为FavorEvent的类调用回调       d      EventBus.getDefault().post(new FavorEvent(000, "nimeia"));

}
        });
    }
}

点击MainActivity2中findViewById(R.id.rrr)的事件,log打印如下,说明调用成功

时间: 2024-10-15 19:12:54

EventBus 的使用的相关文章

EventBus的使用和原理剖析

尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38174537 代码下载:http://download.csdn.net/detail/yuanzeyao2008/7684041 在编程过程中,当我们想通知其他组件某些事情发生时,我们通常使用观察者模式,正式因为观察者模式非常常见,所以在jdk1.5中已经帮助我们实现了观察者模式,我们只需要简单的继承一些类就可以快速使用观察者模式,在Android中也有一个类似功能的开源库EventBu

手机影音第十六天,集成eventbus代替广播

代码已经托管到码云上,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 一 EventBus 3.0   ---利用eventbus代替广播来获取音乐的数据. EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦. 1.下载Even

Android EventBus技能点梳理

EventBus为Github上的开源项目,地址:https://github.com/greenrobot/EventBus 疑问:1. 现在都是Android Studio创建的项目,如何导入这些项目(对工具不熟悉):2. 如何得到这些开源项目的.jar包? EventBus概念分析(获取感性认识): 所述publisher为发布者,subscriber为订阅者:Event的Publisher为事件的所有者,而各个Subscriber会收到对应的Event. 其主要功能是替代Intent.H

EventBus的简单使用

文章中引用了张鸿洋大神的博客,链接在此:http://blog.csdn.net/lmj623565791/article/details/40794879 和 http://blog.csdn.net/lmj623565791/article/details/40920453 此文章为本人学习记录所用,如有不对,欢迎指正! 进入正题 使用步骤: 1.新建一个类 2.在使用页面进行注册/反注册/传递数据 3.在接收页面进行接收 具体代码: 1.新建一个类 public class Event{

Guava: 事件总线EventBus

EventBus 直译过来就是事件总线,它使用发布订阅模式支持组件之间的通信,不需要显式地注册回调,比观察者模式更灵活,可用于替换Java中传统的事件监听模式,EventBus的作用就是解耦,它不是通用的发布订阅系统,也不能用于进程间通信.可用于Android的EventBus库主要有这几个:Google出品的Guava,Guava是一个庞大的库,EventBus 只是它附带的一个小功能,因此实际项目中使用并不多.用的最多的是greenrobot/EventBus,这个库的优点是接口简洁,集成方

EventBus(一):Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

Android EventBus源码解析, 带你深入理解EventBus

上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: [java] view plain copy public class SampleComponent extends Fragment { @Override public vo

Android EventBus实战, 没听过你就out了

1.概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于事件的发布和订阅. EventBus定义:是一个发布 / 订阅的事件总线. 这么说应该包含4个成分:发布者,订阅者,事件,总线. 那么这四者的关系是什么呢? 很明显:订阅者订阅事件到总线,发送者发布事件. 大体应该是这样的关系: 订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时也可以是订阅者

安卓开发笔记——探索EventBus

1.关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大.例如多个Fragment之间的数据传递,Service与Activity.Fragment之间的通讯,BroadCast与Activity.Fragment之间的通讯,各种startActivityForResult的使用,繁杂的操作令我们所厌倦,在GitHub上找了下解决方案,发现了一个不错的开源库EventBus,相信很多做过Android开发的朋友都或

快速Android开发系列通信篇之EventBus

概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过**EventBus**实现. 作为一个消息总线,有三个主要的元素: Event:事件 Subscriber:事件订阅者,接收特定的事件 Publisher:事件发布者,用于通知Subscri