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. ansible 判断和循环

    标准循环 模式一 - name: add several users user: name={{ item }} state=present groups=wheel with_items: - te ...

  2. Git 添加自己分支 pull request

    1.找到项目地址 这里,我们可以找到项目地址,比如:https://github.com/*****/Cplusplus_Thread_Lib,然后点击页面右上角的 "fork"  ...

  3. 织梦dedecms文章发布日期时间调用标签大全

    dedecms首页时间标签: 1.12-27 样式 [field:pubdate function='strftime("%m-%d",@me)'/] 2.May 15, 2012 ...

  4. 重读The C programming Lanuage 笔记二:运算符优先级

    运算符的优先级和结合性有明确的规定,但是,除少数例外情况外,表达式的求值次序没有定义,甚至某些有副作用的子表达式也没有定义. 也就是说运算符的定义保证了其操作数按某一特定的顺序求值,否则具体实现可以自 ...

  5. 编写第一个ROS(创建工作空间workspace和功能包package)

    刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个 ...

  6. 使用hexo搭建github博客

    Win7系统已经安装了node.js和npm npm install -g hexo-cli 全局安装hexo客户端 hexo init blog 在喜欢的位置初始化blog目录 cd blog np ...

  7. MYSQL导入中文数据乱码的四种解决办法

    方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 my ...

  8. 整屏滚动效果 jquery.fullPage.js插件+CSS3实现

    最近很流行整屏滚动的效果,无论是在PC端还是移动端,本人也借机学习了一下,主要通过jquery.funnPage.js插件+CSS3实现效果. 本人做的效果: PC端:http://demo.qpdi ...

  9. 第八十二节,CSS3过渡效果

    CSS3过渡效果 学习要点: 1.过渡简介 2.transition-property 3.transition-duration 4.transition-timing-function 5.tra ...

  10. jQuery第六章

    jQuery与Ajax应用 一.Ajax的优势和不足 1.Ajax的优势: (1)不需要插件支持:不需要任何浏览器插件就可以被绝大多数浏览器支持 (2)优秀的用户体验:能在不刷新整个页面的前提下更新数 ...