【第二篇】学习 android 事件总线androidEventbus之异步事件的传递

简介: 1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),"soyoungboy");。

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.  1 package com.example.mysimpleeventbus;
     2 
     3 import org.simple.eventbus.EventBus;
     4 import org.simple.eventbus.Subscriber;
     5 import org.simple.eventbus.ThreadMode;
     6 
     7 import android.app.Activity;
     8 import android.os.Bundle;
     9 import android.util.Log;
    10 import android.widget.Toast;
    11 
    12 public class OtherActivity extends Activity {
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         // TODO Auto-generated method stub
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_main);
    18         // 注意此处的registerSticky而不是register
    19         EventBus.getDefault().registerSticky(this);
    20     }
    21 
    22     // 此处获取发送事件的内容
    23     @Subscriber(tag = "soyoungboy")
    24     void showToast(User user) {
    25         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG)
    26                 .show();
    27     }
    28 
    29     // 获取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     }
    37 
    38     @Override
    39     protected void onDestroy() {
    40         super.onDestroy();
    41         // 同样需要unregister
    42         EventBus.getDefault().unregister(this);
    43     }
    44 }

     



同一个activity内部的内容传递,事件内容不会多次叠加,所以无需删除的操作:
  1 package com.example.mysimpleeventbus;
  2 
  3 import org.simple.eventbus.EventBus;
  4 import org.simple.eventbus.Subscriber;
  5 import org.simple.eventbus.ThreadMode;
  6 
  7 import android.content.Intent;
  8 import android.os.Bundle;
  9 import android.support.v7.app.ActionBarActivity;
 10 import android.util.Log;
 11 import android.view.View;
 12 import android.view.View.OnClickListener;
 13 import android.widget.Button;
 14 
 15 public class MainActivity extends ActionBarActivity implements OnClickListener {
 16 
 17     private Button button;
 18     private Button ansyBtn;
 19     private Button ansy1Btn;
 20 
 21     @Override
 22     protected void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24         setContentView(R.layout.activity_main);
 25         initView();
 26         // 1 首先注册事件总线
 27         EventBus.getDefault().register(this);
 28     }
 29 
 30     private void initView() {
 31         button = (Button) findViewById(R.id.button);
 32         ansyBtn = (Button) findViewById(R.id.ansyBtn);
 33         ansy1Btn = (Button) findViewById(R.id.ansy1Btn);
 34 
 35         button.setOnClickListener(this);
 36         ansyBtn.setOnClickListener(this);
 37         ansy1Btn.setOnClickListener(this);
 38     }
 39 
 40     @Override
 41     protected void onDestroy() {
 42         super.onDestroy();
 43         EventBus.getDefault().unregister(this);
 44     }
 45 
 46     @Override
 47     public void onClick(View view) {
 48         switch (view.getId()) {
 49         case R.id.button:
 50 
 51             postSticky();
 52 
 53             break;
 54 
 55         case R.id.ansyBtn:
 56 
 57             postAnsy();
 58 
 59             break;
 60         case R.id.ansy1Btn:
 61             
 62             postAnsyInMainActivity();
 63             
 64             break;
 65         default:
 66             break;
 67         }
 68     }
 69 
 70     /**
 71      * Ansy事件传递,多个Activity之间必须postSticky
 72      */
 73     private void postAnsy() {
 74         // 将目标函数执行在异步线程中
 75         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
 76                 "ansy");
 77         gotoOtherActivity();
 78     }
 79 
 80     /**
 81      * 在本Activity中进行Ansy事件发布操作
 82      */
 83     private void postAnsyInMainActivity() {
 84         EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
 85     }
 86 
 87     /**
 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     }
 97 
 98     private void postSticky() {
 99         // 2 发送Sticky事件
100         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
101                 "soyoungboy");
102 
103         gotoOtherActivity();
104     }
105 
106     private void gotoOtherActivity() {
107         // 跳转页面
108         Intent intent = new Intent(MainActivity.this, OtherActivity.class);
109         startActivity(intent);
110     }
111 }

 

 
相关文章
|
6天前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
2月前
|
JavaScript
Vue学习之--------全局事件总线(2022/8/22)
这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。
Vue学习之--------全局事件总线(2022/8/22)
|
1月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
2月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
86 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
2月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
2月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
110 9
|
2月前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
32 0
|
4月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
30 2
中间件事件总线事件定义
|
4月前
|
XML Android开发 数据格式
37. 【Android教程】基于监听的事件处理机制
37. 【Android教程】基于监听的事件处理机制
64 2
|
5月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
下一篇
无影云桌面