【第二篇】学习 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 }

 

 
相关文章
|
17天前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
23天前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
40 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
1月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
1月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
99 9
|
29天前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
28 0
|
3月前
|
消息中间件 JavaScript 中间件
中间件事件总线事件定义
【6月更文挑战第20天】
29 2
中间件事件总线事件定义
|
3月前
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】
|
3月前
|
JSON Java API
【Android】使用 Retrofit2 发送异步网络请求的简单案例
**摘要:** Retrofit是Android和Java的HTTP客户端库,简化了RESTful API交互。它通过Java接口定义HTTP请求,并提供注解管理参数、HTTP方法等。要使用Retrofit,首先在AndroidManifest.xml中添加`INTERNET`权限,然后在`build.gradle`中引入Retrofit和Gson依赖。创建服务器响应数据类和描述接口的接口,如`Result`和`Api`。通过Retrofit.Builder配置基础URL并构建实例,之后调用接口方法创建Call对象并发送异步请求。
117 1
|
3月前
|
Android开发
40. 【Android教程】AsyncTask:异步任务
40. 【Android教程】AsyncTask:异步任务
90 2
|
3月前
|
XML Android开发 数据格式
37. 【Android教程】基于监听的事件处理机制
37. 【Android教程】基于监听的事件处理机制
59 2