【第二篇】学习 android 事件总线androidEventbus之异步事件的传递
1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过
postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),
"soyoungboy");。
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);
}
}
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之异步事件的传递的更多相关文章
- 【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去. 使用的框架地址:https://github.com/bboyfeiy ...
- 【第三篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 1,比如在子线程构造方法里面进行实现总线的注册操作: 2,要想子线程中接收消息的功能执行,必须启动线程. 3, ...
- 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity
这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...
- Jquery第二篇【选择器、DOM相关API、事件API】
前言 前面已经介绍过了Jquery这门语言,其实就是一个javaScript的库-能够简化我们书写的代码-.本博文主要讲解使用Jquery定位HTML控件[定位控件就是获取HTML的标签],使用Jqu ...
- AndroidEventBus ( 事件总线 ) 的设计与实现
1. 功能介绍 AndroidEventBus是一个Android平台的事件总线库, 它简化了Activity.Fragment.Service等组件或者对象之间的交互,非常大程度上减少了它们之间的耦 ...
- 学习KnockOut第二篇之Counter
学习KnockOut第二篇之Counter 欲看此 ...
- [置顶] android利用jni调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so
0:前言 1:本文主要作为丙方android公司的身份来写 2:作者有不对的地方,请指出,谢谢 [第一篇:android利用jni调用第三方库——编写库libhello.so] [第二篇:androi ...
- android调用第三方库——第二篇——编写库android程序直接调用第三方库libhello.so (转载)
转自:http://blog.csdn.net/jiuyueguang/article/details/9449737 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言 1:本文主要作为 ...
- python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)
昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...
随机推荐
- Java获取IP
public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader(&q ...
- Java实现应用程序记住用户名、密码功能
1. 从网上下载jquery.cookie.js,拷贝到应用程序中. 2. 登录页面(login.jsp)导入jquery.cookie.js <script type=&q ...
- html音视频标签
音视频标签是html5标签,分别为<audio></audio>和<video></video>,这两个标签用法大致相同,且都仅在IE9及以上版本和其他 ...
- 整合改造百度编译器到thinkphp上传图片到OSS
oss上传类库,放到public下,放到extend下,实例化是报错找不到上传类(我不知道为什么).
- 第七十九,CSS3背景渐变效果
CSS3背景渐变效果 学习要点: 1.线性渐变 2.径向渐变 本章主要探讨HTML5中CSS3背景渐变功能,主要有两种渐变方式:线性渐变和径向 (放射性)渐变. 一.线性渐变 linear-gradi ...
- javascript基础(五)函数
原文http://pij.robinqu.me/ 通过call和apply间接调用函数(改变this) call 和 apply带有多个参数,call和apply把当前函数的this指向第一个参数给定 ...
- sql新建数据库表,及添加多个主键
create table tb_Modules(module_Id int identity(1,1) primary key, (自增)model_Name varchar(50) not nul ...
- 朋友遇到过的t厂面试题
朋友遇到过的t面试题 leetcode160 找链表交点 leetcode206 反转链表
- Matlab - 矩阵基本操作
1. 矩阵的输入 右值是用方括号表示: , 逗号或空格分隔元素 ; 分号分隔行 >> A = [-, ; , ] A = - 2. 矩阵的加减 >> C = A + B ...
- 局域网iis添加主机头
局域网上用主机头访问不像外网,直接设置主机头就行了, 在局域网设置了主机头还要修改host文件 打开host快捷的方法: win7在win+r运行里面运行C:\Windows\System32\dri ...