1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过

postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),
"soyoungboy");。

2,接受到事件后,很有必要移除事件里面的内容,否则事件内容会多次叠加:EventBus.getDefault().removeStickyEvent(user.getClass(),"ansy") [貌似这个问题只出现在多个Activity之间的事件发送和接收有这问题,但是单个activity里面不会存在这个问题]
3,接收事件相应的时候:除了tag以外还要加上mode,mode =mode =ThreadMode.ASYNC.
4,当然tag可以不用设置,但是发送和接收必须统一,要么都加上,要么都不加。
下面是两个activity之间的ansy事件传递:
  1. package com.example.mysimpleeventbus;
    
    import org.simple.eventbus.EventBus;
    import org.simple.eventbus.Subscriber;
    import org.simple.eventbus.ThreadMode; import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button; public class MainActivity extends ActionBarActivity implements OnClickListener { private Button button;
    private Button ansyBtn;
    private Button ansy1Btn; @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    // 1 首先注册事件总线
    EventBus.getDefault().register(this);
    } private void initView() {
    button = (Button) findViewById(R.id.button);
    ansyBtn = (Button) findViewById(R.id.ansyBtn);
    ansy1Btn = (Button) findViewById(R.id.ansy1Btn); button.setOnClickListener(this);
    ansyBtn.setOnClickListener(this);
    ansy1Btn.setOnClickListener(this);
    } @Override
    protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
    } @Override
    public void onClick(View view) {
    switch (view.getId()) {
    case R.id.button: postSticky(); break; case R.id.ansyBtn: postAnsy(); break;
    case R.id.ansy1Btn: postAnsyInMainActivity(); break;
    default:
    break;
    }
    } /**
    * Ansy事件传递,多个Activity之间必须postSticky
    */
    private void postAnsy() {
    // 将目标函数执行在异步线程中
    EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
    "ansy");
    gotoOtherActivity();
    }
    /**
    * 在本Activity中进行Ansy事件发布操作
    */
    private void postAnsyInMainActivity() {
    EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
    } /**
    * 在本Activity中进行Ansy事件接受操作
    *
    * @param user
    */
    @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC)
    private void ansy(User user) {
    Log.i("user", user.toString());
    Log.i("ThreadName", Thread.currentThread().getName());
    } private void postSticky() {
    // 2 发送Sticky事件
    EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
    "soyoungboy"); gotoOtherActivity();
    } private void gotoOtherActivity() {
    // 跳转页面
    Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    startActivity(intent);
    }
    }


 
OtherActivity.java
  1.  package com.example.mysimpleeventbus;
    
     import org.simple.eventbus.EventBus;
    import org.simple.eventbus.Subscriber;
    import org.simple.eventbus.ThreadMode; import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.widget.Toast; public class OtherActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 注意此处的registerSticky而不是register
    EventBus.getDefault().registerSticky(this);
    } // 此处获取发送事件的内容
    @Subscriber(tag = "soyoungboy")
    void showToast(User user) {
    Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG)
    .show();
    } // 获取Ansy异步事件的内容
    30 @Subscriber(tag = "ansy",mode = ThreadMode.ASYNC)
    31 private void ansy(User user) {
    32 Log.i("user", user.toString());
    33 Log.i("ThreadName", Thread.currentThread().getName());
    34 //删除事件,否则会出现重复的响应事件
    35 EventBus.getDefault().removeStickyEvent(user.getClass(), "ansy");
    36 }

    @Override
    protected void onDestroy() {
    super.onDestroy();
    // 同样需要unregister
    EventBus.getDefault().unregister(this);
    }
    }



同一个activity内部的内容传递,事件内容不会多次叠加,所以无需删除的操作:
 package com.example.mysimpleeventbus;

 import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;
import org.simple.eventbus.ThreadMode; import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends ActionBarActivity implements OnClickListener { private Button button;
private Button ansyBtn;
private Button ansy1Btn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
// 1 首先注册事件总线
EventBus.getDefault().register(this);
} private void initView() {
button = (Button) findViewById(R.id.button);
ansyBtn = (Button) findViewById(R.id.ansyBtn);
ansy1Btn = (Button) findViewById(R.id.ansy1Btn); button.setOnClickListener(this);
ansyBtn.setOnClickListener(this);
ansy1Btn.setOnClickListener(this);
} @Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
} @Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button: postSticky(); break; case R.id.ansyBtn: postAnsy(); break;
case R.id.ansy1Btn: postAnsyInMainActivity();

break;
default:
break;
}
} /**
* Ansy事件传递,多个Activity之间必须postSticky
*/
private void postAnsy() {
// 将目标函数执行在异步线程中
EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
"ansy");
gotoOtherActivity();
} /**
81 * 在本Activity中进行Ansy事件发布操作
82 */
83 private void postAnsyInMainActivity() {
84 EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
85 }

/**
88 * 在本Activity中进行Ansy事件接受操作
89 *
90 * @param user
91 */
92 @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC)
93 private void ansy(User user) {
94 Log.i("user", user.toString());
95 Log.i("ThreadName", Thread.currentThread().getName());
96 }

private void postSticky() {
// 2 发送Sticky事件
EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
"soyoungboy"); gotoOtherActivity();
} private void gotoOtherActivity() {
// 跳转页面
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
}
 

【第二篇】学习 android 事件总线androidEventbus之异步事件的传递的更多相关文章

  1. 【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递

    最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去. 使用的框架地址:https://github.com/bboyfeiy ...

  2. 【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收

    发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作: 2,要想子线程中接收消息的功能执行,必须启动线程. 3, ...

  3. 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity

    这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...

  4. Jquery第二篇【选择器、DOM相关API、事件API】

    前言 前面已经介绍过了Jquery这门语言,其实就是一个javaScript的库-能够简化我们书写的代码-.本博文主要讲解使用Jquery定位HTML控件[定位控件就是获取HTML的标签],使用Jqu ...

  5. AndroidEventBus ( 事件总线 ) 的设计与实现

    1. 功能介绍 AndroidEventBus是一个Android平台的事件总线库, 它简化了Activity.Fragment.Service等组件或者对象之间的交互,非常大程度上减少了它们之间的耦 ...

  6. 学习KnockOut第二篇之Counter

                                                                        学习KnockOut第二篇之Counter        欲看此 ...

  7. [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so

    0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...

  8. android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)

    转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...

  9. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

随机推荐

  1. JavaFX基础学习之OkHttp/Gson2

    222 package application; import java.io.IOException; import java.net.URL; import java.util.ResourceB ...

  2. android studio的lib和jniLibs

    在android studio 中添加jar和so时,将jar文件直接拷贝到 项目目录\app\libs下即可,将so文件按照平台分类目录放到 项目目录\app\src\main\jniLibs\平台 ...

  3. MyBatis 异常 集锦

    异常1.使用映射器 (还没有使用Spring) 异常信息摘要: org.apache.ibatis.binding.BindingException: Type interface com.jege. ...

  4. JavaScript DOM编程艺术-学习笔记

    发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...

  5. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  6. 写Java程序的三十个基本规则【新手必读】

    (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母.例如:  ThisIsAClassName  this ...

  7. POJ 3740 Easy Finding

    #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...

  8. ios打开系统自带APP

    打开系统自带app 打开系统设置: [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root= ...

  9. Apache Kafka开发入门指南(2)

    Apache Kafka目标是统一离线和在线处理,与Flume和Scribe相比较,Kafka在处理活动流数据方面更具优势.但是从架构的视野来看,Kafka与传统的消息系统(例如ActiveMQ或Ra ...

  10. 【Python】关于Python有意思的用法

    开一篇文章,记录关于Python有意思的用法,不断更新 1.Python树的遍历 def sum(t): tmp=0 for k in t: if not isinstance(k,list): tm ...