【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方:
package com.example.mysimpleeventbus; import java.util.ArrayList;
import java.util.List; 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;
import android.widget.Toast; public class MainActivity extends ActionBarActivity implements OnClickListener { private Button button;
private Button ansyBtn;
private Button ansy1Btn;
private Button sendListBtn;
private Button sendToThreadBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
// 1 首先注册事件总线
EventBus.getDefault().register(this);
MyThread myThread = new MyThread();
myThread.start();
} private void initView() {
button = (Button) findViewById(R.id.button);
ansyBtn = (Button) findViewById(R.id.ansyBtn);
ansy1Btn = (Button) findViewById(R.id.ansy1Btn);
sendListBtn = (Button) findViewById(R.id.sendListBtn);
sendToThreadBtn = (Button) findViewById(R.id.sendToThreadBtn); button.setOnClickListener(this);
ansyBtn.setOnClickListener(this);
ansy1Btn.setOnClickListener(this);
sendListBtn.setOnClickListener(this);
sendToThreadBtn.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;
case R.id.sendListBtn: // postListDate();
postListToOtherActivity();
break;
case R.id.sendToThreadBtn: postToThread();
break;
default:
break;
}
} /**
93 * 发送事件总线到线程里面去接收
94 */
95 private void postToThread() {
96 EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"),"thread");
97 }
class MyThread extends Thread{ public MyThread() {
EventBus.getDefault().register(this);
} /**
106 * 接收其他线程发来的消息
107 * @param user
108 */
109 @Subscriber(tag = "thread")
110 private void receiveUser(User user) {
111 Log.i("thread --thread == ", user.toString());
112 }
@Override
public void run() {
super.run();
}
} private void postListToOtherActivity() {
List<User> users = new ArrayList<User>();
User user;
for (int i = 0; i < 10; i++) {
user = new User("帅哥" + i, "清华大学");
users.add(user);
} EventBus.getDefault().postSticky(users);
gotoOtherActivity();
} /**
* List数据的传递
*/
private void postListDate() {
List<User> users = new ArrayList<User>();
User user;
for (int i = 0; i < 10; i++) {
user = new User("帅哥" + i, "清华大学");
users.add(user);
} EventBus.getDefault().post(users);
} @Subscriber
private void reveiveList(List<User> users) {
for (int i = 0; i < users.size(); i++) {
Toast.makeText(getApplicationContext(), users.get(i).toString(),
Toast.LENGTH_SHORT).show();
}
} /**
* 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);
}
}
【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收的更多相关文章
- 【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去. 使用的框架地址:https://github.com/bboyfeiy ...
- 【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过 postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().p ...
- android UI 操作 不要在子线程中操作UI
不管是android ,还是 ios ,请不要在子线程中操作UI,有时有些崩溃,从报错上看不出什么原因,就有可能是子线程操作了UI:切记,切记! 请放在主线程例: activity.runOnUiTh ...
- 在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.游戏中有一个计时功能在主线程中调用: 1 + (NSTimer *)scheduledTimerWithTimeInterval:( ...
- android 不能在子线程中更新ui的讨论和分析
问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...
- Android多线程之(一)View.post()源码分析——在子线程中更新UI
提起View.post(),相信不少童鞋一点都不陌生,它用得最多的有两个功能,使用简便而且实用: 1)在子线程中更新UI.从子线程中切换到主线程更新UI,不需要额外new一个Handler实例来实现. ...
- Android开发UI之在子线程中更新UI
转自第一行代码-Android Android是不允许在子线程中进行UI操作的.在子线程中去执行耗时操作,然后根据任务的执行结果来更新相应的UI控件,需要用到Android提供的异步消息处理机制. 代 ...
- 老问题:Android子线程中更新UI的3种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 方法一:用Handler 1.主线程中定义Handler: Handle ...
- Android子线程中更新UI的4种方法
方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...
随机推荐
- tomcat设置http自动跳转为https访问
一.生成服务器端证书文件 可以使用Windows系统或者Linux系统 (1)Windows环境 条件:已经安装JDK 步骤: 1.在运行里输入cmd进入命令窗口 2.进入JDK安装目录 如D:/P ...
- 学习Java第一篇——Java 安装及环境搭配
内容提要: 1.下载JDK: 2.安装JDK: 3.配置JDK; 第一,下载JDK: 1.登陆网址:www.oracle.com 2.点击 Downloads 3.选择 Java SE 4.选择 ...
- 前端用Request Payload方式请求后台
后台接收方式: InputStream inputStream = request.getInputStream(); byte[] buff = new byte[1024]; int len = ...
- uinavigationcontroller uinavigationbar 下方横线去除
#import "QKBaseNavigationController.h" #define fontSize 19 @interface QKBaseNavigationCont ...
- CVE-2014-1767 利用分析(2015.2)
CVE-2014-1767利用分析 参考这篇文章利用思路,重现利用,主要说明自己在实现的时候遇到的坑. 利用思路 1. 第一次 IoControl,释放 MDL,我们通过 VirtualAddress ...
- checkbox:全选与反全选
$(document).ready(function () { //全选checkbox $("#selectAll").click(function () { var check ...
- A*寻路算法 (cocos2d-js详细代码)
看了几天的A*算法,感觉要成为一个游戏开发者,有必要把这个著名的算法拿到手. 网上有此算法的代码片段,但主要还是些模板类的伪代码,所以想分享一段完整的A*算法代码供大家更好的理解!(这里使用的是js语 ...
- 大型网站技术架构 核心原理与案例分析 pdf
需要的小伙伴拿去,哈哈.百度云链接:https://pan.baidu.com/s/1hsuiM3q
- PHP操作Memcache基本函数
Memcache模块提供了于Memcached方便的面向过程及面向对象的接口,Memcached是为了降低动态web应用从数据库加载数据而产生的一种常驻进程缓存产品.Memcache模块同时提供了一个 ...
- Java 语言的 XPath API
如果要告诉别人买一加仑牛奶,您会怎么说?"请去买一加仑牛奶回来" 还是 "从前门出去,向左转,走三个街区向右转,再走半个街区向右转进入商店.走向四号通道,沿通道走五米向左 ...