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. MySQL安装之zip格式

    背景: 今天本来想学点JDBC的,没想到在MySQL的安装上卡了很久,特此写下此文,希望大家遇到类似问题可以早些跳出坑.   一.寻找资源 今天,为了学习JDBC,准备在公司的电脑上装MySQL,于是 ...

  2. THML结构语义化之table/form

    以table/form标签语义化,做为博客首贴 应用场景1-table表格 <table> <caption> <thead> <th colspan=&qu ...

  3. Topself 方便调试的Window服务框架

    Installing Topshelf nuget Install-Package Topshelf public class TownCrier { readonly Timer _timer; p ...

  4. linux下常见问题

    1.配置path 环境变量 # vim /etc/profile 在文档最后,添加: export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PA ...

  5. php自定义函数求取平方根

    <?phpfunction sqare($a, $left, $right){ $mid = ($left + $right)/2; if($mid * $mid == $a || (abs($ ...

  6. C# 常用接口学习 IEnumerable<T>

    作者:乌龙哈里 时间:2015-10-24 平台:Window7 64bit,Visual Studio Community 2015 本文参考: MSDN IEnumerable<T> ...

  7. 大型网站技术架构 核心原理与案例分析 pdf

    需要的小伙伴拿去,哈哈.百度云链接:https://pan.baidu.com/s/1hsuiM3q

  8. js 的四种设计模式的优缺点

    原始模式: var Car = new Object; Car.color = "blue"; Car.door = 4; Car.showColor = function() { ...

  9. JUnit01Eclipse添加JUnite

    JUnit 傻瓜教程 添加一個java工程 點擊右鍵選擇Properties 创建一个source folder 目的就是把测试类和被测试的类分开 添加一个类  加法 乘法 public class ...

  10. Major and minor numbers

    The major nuber is the driver associated with the device, while the minor number is used by the kern ...