【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递
2024-08-26 11:18:22
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去。
使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus
Sticky 事件 使用例子:
1,首先每个Activity或者fragement都要进行eventBus的注册和反注册。
发送sticky事件的activity:
package com.example.mysimpleeventbus;
import org.simple.eventbus.EventBus;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends ActionBarActivity { private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
// 1 首先注册事件总线
EventBus.getDefault().register(this);
button.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// 2 发送Sticky事件
EventBus.getDefault().postSticky(
new User("soyoungboy", "西安财经学院")); // 跳转页面
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}
接收事件的类:
注意这里的注册不是register就行了,而是:EventBus.getDefault().registerSticky(this);
package com.example.mysimpleeventbus;
import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;
import android.app.Activity;
import android.os.Bundle;
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
void showToast(User user) {
Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
//同样需要unregister
EventBus.getDefault().unregister(this);
}
}
然后配置文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mysimpleeventbus"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="20" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".OtherActivity" >
</activity>
</application>
</manifest>
如果MainActivity发送事件总线时,设置Tag的话,OtherActivity@Subscriber 注解没有添加tag的话,就不会获取到数据,除非设置tag
设置tag代码如下:
EventBus.getDefault().postSticky( new User("soyoungboy", "西安财经学院"),"soyoungboy");
则对应的OtherActivity中接收的改为:
//此处获取发送事件的内容
//此处获取发送事件的内容
@Subscriber(tag = "soyoungboy")
void showToast(User user) {
Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
}
框架对应Demo中有这样一句话:
不同组件 (Activity、Fragment、Service等)、不同线程之间都可以通过事件总线来发布事件,它是线程安全的。
* 只要发布的事件的参数类型和tag都匹配即可接收到事件.
最新文章
- 使用MyBatis Generator自动创建代码( SSM框架)
- iOS安全相关学习资料
- centos minimal 开启无线网卡 &; 查看IP
- 云端持续集成——AppVeyor拥抱GitHub
- [Sql Server2008]树结构的递归算法
- HDU 5512 Pagodas (gcd)
- Tomcat DEBUG模式下修改代码立刻生效!
- 团队项目的NABC
- iOS 自定义view里实现控制器的跳转
- Solaris 安装JDK
- 九度OJ 1078 二叉树遍历
- C#中的委托事件的分析
- [置顶] Array ArrayList LinkList的区别剖析
- ActionFilterAttribute OnActionExecuting 获取参数
- boostrap按钮
- Python基础_如何用pip安装文件
- 老司机带你玩转web service
- Mongodb - 切片搭建
- Yii框架中使用SRBAC作为权限管理模块时遇到的问题
- phpexcel 导入超过26列时的解决方案