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

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

发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方:

1,比如在子线程构造方法里面进行实现总线的注册操作;
2,要想子线程中接收消息的功能执行,必须启动线程。
3,添加tag和不添加tag类似其他。
  1 package com.example.mysimpleeventbus;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 import org.simple.eventbus.EventBus;
  7 import org.simple.eventbus.Subscriber;
  8 import org.simple.eventbus.ThreadMode;
  9 
 10 import android.content.Intent;
 11 import android.os.Bundle;
 12 import android.support.v7.app.ActionBarActivity;
 13 import android.util.Log;
 14 import android.view.View;
 15 import android.view.View.OnClickListener;
 16 import android.widget.Button;
 17 import android.widget.Toast;
 18 
 19 public class MainActivity extends ActionBarActivity implements OnClickListener {
 20 
 21     private Button button;
 22     private Button ansyBtn;
 23     private Button ansy1Btn;
 24     private Button sendListBtn;
 25     private Button sendToThreadBtn;
 26 
 27     @Override
 28     protected void onCreate(Bundle savedInstanceState) {
 29         super.onCreate(savedInstanceState);
 30         setContentView(R.layout.activity_main);
 31         initView();
 32         // 1 首先注册事件总线
 33         EventBus.getDefault().register(this);
 34         MyThread myThread = new MyThread();
 35         myThread.start();
 36     }
 37 
 38     private void initView() {
 39         button = (Button) findViewById(R.id.button);
 40         ansyBtn = (Button) findViewById(R.id.ansyBtn);
 41         ansy1Btn = (Button) findViewById(R.id.ansy1Btn);
 42         sendListBtn = (Button) findViewById(R.id.sendListBtn);
 43         sendToThreadBtn = (Button) findViewById(R.id.sendToThreadBtn);
 44 
 45         button.setOnClickListener(this);
 46         ansyBtn.setOnClickListener(this);
 47         ansy1Btn.setOnClickListener(this);
 48         sendListBtn.setOnClickListener(this);
 49         sendToThreadBtn.setOnClickListener(this);
 50     }
 51 
 52     @Override
 53     protected void onDestroy() {
 54         super.onDestroy();
 55         EventBus.getDefault().unregister(this);
 56     }
 57 
 58     @Override
 59     public void onClick(View view) {
 60         switch (view.getId()) {
 61         case R.id.button:
 62 
 63             postSticky();
 64 
 65             break;
 66 
 67         case R.id.ansyBtn:
 68 
 69             postAnsy();
 70 
 71             break;
 72         case R.id.ansy1Btn:
 73 
 74             postAnsyInMainActivity();
 75 
 76             break;
 77         case R.id.sendListBtn:
 78 
 79             // postListDate();
 80             postListToOtherActivity();
 81             break;
 82         case R.id.sendToThreadBtn:
 83 
 84             postToThread();
 85 
 86             break;
 87         default:
 88             break;
 89         }
 90     }
 91 
 92     /**
 93      * 发送事件总线到线程里面去接收
 94      */
 95     private void postToThread() { 
 96         EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"),"thread");
 97     }
 98 
 99     class MyThread extends Thread{
100 
101         public MyThread() {
102             EventBus.getDefault().register(this);
103         }
104 
105         /**
106          * 接收其他线程发来的消息
107          * @param user
108          */
109         @Subscriber(tag = "thread")
110         private void receiveUser(User user) {
111             Log.i("thread --thread == ", user.toString());
112         }
113         @Override
114         public void run() {
115             super.run();
116         }
117     }
118 
119     private void postListToOtherActivity() {
120         List<User> users = new ArrayList<User>();
121         User user;
122         for (int i = 0; i < 10; i++) {
123             user = new User("帅哥" + i, "清华大学");
124             users.add(user);
125         }
126 
127         EventBus.getDefault().postSticky(users);
128         gotoOtherActivity();
129     }
130 
131     /**
132      * List数据的传递
133      */
134     private void postListDate() {
135         List<User> users = new ArrayList<User>();
136         User user;
137         for (int i = 0; i < 10; i++) {
138             user = new User("帅哥" + i, "清华大学");
139             users.add(user);
140         }
141 
142         EventBus.getDefault().post(users);
143     }
144 
145     @Subscriber
146     private void reveiveList(List<User> users) {
147         for (int i = 0; i < users.size(); i++) {
148             Toast.makeText(getApplicationContext(), users.get(i).toString(),
149                     Toast.LENGTH_SHORT).show();
150         }
151     }
152 
153     /**
154      * Ansy事件传递,多个Activity之间必须postSticky
155      */
156     private void postAnsy() {
157         // 将目标函数执行在异步线程中
158         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
159                 "ansy");
160         gotoOtherActivity();
161     }
162 
163     /**
164      * 在本Activity中进行Ansy事件发布操作
165      */
166     private void postAnsyInMainActivity() {
167         EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
168     }
169 
170     /**
171      * 在本Activity中进行Ansy事件接受操作
172      * 
173      * @param user
174      */
175     @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC)
176     private void ansy(User user) {
177         Log.i("user", user.toString());
178         Log.i("ThreadName", Thread.currentThread().getName());
179     }
180 
181     private void postSticky() {
182         // 2 发送Sticky事件
183         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
184                 "soyoungboy");
185 
186         gotoOtherActivity();
187     }
188 
189     private void gotoOtherActivity() {
190         // 跳转页面
191         Intent intent = new Intent(MainActivity.this, OtherActivity.class);
192         startActivity(intent);
193     }
194 }

 

相关文章
|
25天前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
28天前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
38 1
|
2月前
|
Java Maven 开发工具
第一个安卓项目 | 中国象棋demo学习
本文是作者关于其第一个安卓项目——中国象棋demo的学习记录,展示了demo的运行结果、爬坑记录以及参考资料,包括解决Android Studio和maven相关问题的方法。
第一个安卓项目 | 中国象棋demo学习
|
1月前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
1月前
|
Android开发
Android 事件分发机制详细解读
Android 事件分发机制详细解读
39 4
|
1月前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
45 0
|
3月前
|
JavaScript
Vue学习之--------全局事件总线(2022/8/22)
这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。
Vue学习之--------全局事件总线(2022/8/22)
|
2月前
|
Android开发
Android学习 —— 测试init.rc中的条件触发的处理顺序
Android学习 —— 测试init.rc中的条件触发的处理顺序
|
3月前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
237 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
3月前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
40 0