Android EventBus发布/订阅事件总线

做过Android开发都会陆续用到这个开源库EventBus。EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。下载EventBus的类库源码:https://github.com/greenrobot/EventBus。下面说说简单用法。

本文项目资源下载:

一、先定义一个消息实体类MainSendEvent

package com.example.eventbusdemo;

/**
 * 事件消息实体类
 * @author mmxs
 *
 */
public class MainSendEvent {
	protected String mstrMsg;

	public MainSendEvent(String msg) {
	    mstrMsg = msg;
	}

	public String getStringMsgData(){
		return mstrMsg;
	}
}

二、MainActivity

package com.example.eventbusdemo;

import de.greenrobot.event.EventBus;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;

public class MainActivity extends Activity implements OnClickListener{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//事件注册
		EventBus.getDefault().register(this);
		InitUI();
	}

	private void InitUI() {
		Button button = (Button)findViewById(R.id.button1);
		button.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			Intent intent = new Intent();
			intent.setClass(MainActivity.this, TwoActivity.class);
			startActivity(intent);
			break;

		default:
			break;
		}

	}

	//事件接受
	public void onEventMainThread(MainSendEvent event){
		if(event != null){
			Toast.makeText(getApplicationContext(),
					"MainActivity接受数据" + event.getStringMsgData(),
					Toast.LENGTH_LONG).show();
			TextView textView = (TextView)findViewById(R.id.textView1);
			textView.setText(event.getStringMsgData());
		}
	}

	@Override
	public void onDestroy() {
		//取消注册
		EventBus.getDefault().unregister(this);
		super.onDestroy();
	}
}

三、TwoActivity

package com.example.eventbusdemo;

import de.greenrobot.event.EventBus;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * 第二个TwoActivity发送事件
 * @author mmsx
 *
 */
public class TwoActivity extends Activity implements OnClickListener{

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

		Button button = (Button)findViewById(R.id.button1);
		button.setOnClickListener(this);

	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.button1:
			//事件发送
			EventBus.getDefault().post(new MainSendEvent("from TwoActivity msg"));
			break;
		default:
			break;
		}

	}

}

四、两个activity的布局

1、activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="第二个activity" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

</LinearLayout>

2、activity_two

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="MainActivity" />

</LinearLayout>

在这上面总体上实践就是在activity间消息传递。我们先进去的是MainActivity。然后按button进入第二个activity。在第二个activity按一下button发送数据到MainActivity,用Toat弹出以及settext。返回MainActivity后能看到settext效果。

五、效果图

六、简单来说的流程

1、事件注册或者订阅

EventBus.getDefault().register(this);

2、事件注册或者订阅后的接受

public void onEventMainThread(MainSendEvent event){
		if(event != null){
			Toast.makeText(getApplicationContext(),
					"MainActivity接受数据" + event.getStringMsgData(),
					Toast.LENGTH_LONG).show();
			TextView textView = (TextView)findViewById(R.id.textView1);
			textView.setText(event.getStringMsgData());
		}
	}

3、事件注册或者订阅取消

EventBus.getDefault().unregister(this);

这上面3点是一起,同一个页面。

4、事件的发送者

EventBus.getDefault().post(new MainSendEvent("from TwoActivity msg"));

七、参考文章

http://blog.csdn.net/harvic880925/article/details/40660137

http://blog.csdn.net/lmj623565791/article/details/40920453

最后

项目资源下载:

转载请注明出处的博客网址: http://blog.csdn.net/qq_16064871

如有转载未注明出处博客网址,或者没有得到作者的同意。作者持有版权所有权。

时间: 2024-12-17 16:18:35

Android EventBus发布/订阅事件总线的相关文章

EventBus 事件总线模式实例(发布/订阅事件)

在我们公司经常用到总线,具体的总线是什么让我理解我也不清楚,但是在这几个月下来,我已经知道总线如何使用,现在加上示例讲解总线如何使用. 1. 首先我们的新建一个类,这个类其实是用于总线传递的模型 using System; namespace PurchaseDevices.Model.CommonModel{/// <summary>/// 事件传递参数/// </summary>/// <typeparam name="T"></typep

Android 开源框架 ( 七 ) 事件总线---EventBus

一.引言          与四大组件之一的BroadCast广播比较,广播主要监听系统级事件,比如网络切换,电池电量等属于进程间的通信,EventBus 是进程内的通信.         了解BroadCast 可以查看该文章:Android 四大组件 (三) BroadcastReceiver 介绍 二.基本使用 引入类库: compile 'com.jakewharton:butterknife:8.5.1' 页面打开时候初始化并注册EventBus //初始化 @Override pro

事件总线EventBus使用详解

EventBus源码解析 概述 EventBus是针一款对Android的发布/订阅事件总线.它可以让我们很轻松的实现在Android各个组件之间传递消息,并且代码的可读性更好,耦合度更低. 如何使用 (1)首先需要定义一个消息类,该类可以不继承任何基类也不需要实现任何接口.如: 123 public class MessageEvent { ......} (2)在需要订阅事件的地方注册事件 1 EventBus.getDefault().register(this); (3)产生事件,即发送

Android事件总线 浅谈 EventBus

EventBus官方文档是这么写的:EventBus is a publish/subscribe event bus optimized for Android. 也就是说EventBus是Android下高效的发布/订阅事件总线机制. EventBus可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法. 我们先来看看官方文档对EventBus的介绍: simplifies the commu

Android EventBus事件总线剖析

概述 EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息. 它是一个基于观察者模式的事件发布/订阅框架,开发者可以通过极少的代码去实现多个模块之间的通信,而不需要以层层传递接口的形式去单独构建通信桥梁.从而降低因多重回调导致的模块间强耦合,同时避免产生大量内部类.它拥有使用方便,性能高,接入成本低和支持多线程的优点,实乃模块解耦.代码重构必备良药.

EventBus 事件总线 简介 案例

简介 地址:https://github.com/greenrobot/EventBus EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息. 优点是开销小,代码更优雅,以及将发送者和接收者解耦. 包含4个成分:发布者,订阅者,事件,总线. 这四者的关系:订阅者订阅事件到总线,发送者发布事件:订阅者可以订阅多个事件,发送者可以发布任何事件,发布者同时

Android事件总线(一)EventBus3.0用法全解析

前言 EventBus是一款针对Android优化的发布/订阅事件总线.简化了应用程序内各组件间.组件与后台线程间的通信.优点是开销小,代码更优雅,以及将发送者和接收者解耦.如果Activity和Activity进行交互还好说,如果Fragment和Fragment进行交互着实令人头疼,我们会使用广播来处理,但是使用广播稍显麻烦并且效率也不高,如果传递的数据是实体类需要序列化,那么很显然成本会有点高.今天我们就来学习下EventBus3.0的使用方法. 1.EventBus概述 EventBus

Android事件总线分发库EventBus3.0的简单讲解与实践

Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.反正能帮助我们快速开发,这个确实是个好东西,其实鸿洋大神已经对源码作了一个较全面的剖析了 Android EventBus源码解析 带你深入理解Ev

android eventbus

EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦. 1.下载EventBus的类库 源码:https://github.com/greenrobot/EventBus 2.个人目前觉得源码是通过:观察者模式,有的说是生产,消费模式来写.主要好处是解耦合,类似精简的braoadcast,使用起来非常