【第一篇】学习 android 事件总线androidEventbus之sticky事件的传递

简介: 最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去。 使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus Sticky 事件 使用例子: 1,首先每个Activity或者fragement都要进行eventBus的注册和反注册。
最近再看eventbus相关代码,首先从使用开始,后期再从源码角度分析eventbus.使用Demo后期公布到github上去。
使用的框架地址:https://github.com/bboyfeiyu/AndroidEventBus

Sticky 事件 使用例子:

1,首先每个Activity或者fragement都要进行eventBus的注册和反注册。
发送sticky事件的activity:
  1.  1 package com.example.mysimpleeventbus;
     2 import org.simple.eventbus.EventBus;
     3 import android.content.Intent;
     4 import android.os.Bundle;
     5 import android.support.v7.app.ActionBarActivity;
     6 import android.view.View;
     7 import android.view.View.OnClickListener;
     8 import android.widget.Button;
     9 public class MainActivity extends ActionBarActivity {
    10     
    11     private Button button;
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState) {
    14         super.onCreate(savedInstanceState);
    15         setContentView(R.layout.activity_main);
    16         button = (Button)findViewById(R.id.button);
    17         // 1 首先注册事件总线
    18         EventBus.getDefault().register(this);
    19         button.setOnClickListener(new OnClickListener() {
    20             
    21             @Override
    22             public void onClick(View arg0) {
    23                 // 2 发送Sticky事件
    24                 EventBus.getDefault().postSticky(
    25                         new User("soyoungboy", "西安财经学院"));
    26                 
    27                 // 跳转页面
    28                 Intent intent = new Intent(MainActivity.this, OtherActivity.class);
    29                 startActivity(intent);
    30             }
    31         });
    32     }
    33     @Override
    34     protected void onDestroy() {
    35         super.onDestroy();
    36         EventBus.getDefault().unregister(this);
    37     }
    38 }

     


 
接收事件的类:
注意这里的注册不是register就行了,而是: EventBus.getDefault().registerSticky(this);
 1 package com.example.mysimpleeventbus;
 2 import org.simple.eventbus.EventBus;
 3 import org.simple.eventbus.Subscriber;
 4 import android.app.Activity;
 5 import android.os.Bundle;
 6 import android.widget.Toast;
 7 public class OtherActivity extends Activity {
 8     @Override
 9     protected void onCreate(Bundle savedInstanceState) {
10         // TODO Auto-generated method stub
11         super.onCreate(savedInstanceState);
12         setContentView(R.layout.activity_main);
13         //注意此处的registerSticky而不是register
14         EventBus.getDefault().registerSticky(this);
15     }
16     //此处获取发送事件的内容
17     @Subscriber
18     void showToast(User user) {
19         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
20     }
21     @Override
22     protected void onDestroy() {
23         super.onDestroy();
24         //同样需要unregister
25         EventBus.getDefault().unregister(this);
26     }
27 }

 

然后配置文件:
  1.  1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.example.mysimpleeventbus"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6     <uses-sdk
     7         android:minSdkVersion="8"
     8         android:targetSdkVersion="20" />
     9     <application
    10         android:allowBackup="true"
    11         android:icon="@drawable/ic_launcher"
    12         android:label="@string/app_name"
    13         android:theme="@style/AppTheme" >
    14         <activity
    15             android:name=".MainActivity"
    16             android:label="@string/app_name" >
    17             <intent-filter>
    18                 <action android:name="android.intent.action.MAIN" />
    19                 <category android:name="android.intent.category.LAUNCHER" />
    20             </intent-filter>
    21         </activity>
    22         <activity android:name=".OtherActivity" >
    23         </activity>
    24     </application>
    25 </manifest>

     


如果MainActivity发送事件总线时,设置Tag的话,OtherActivity @Subscriber 注解没有添加tag的话,就不会获取到数据,除非设置tag
设置tag代码如下:
  1.  1 EventBus.getDefault().postSticky( 2 new User("soyoungboy", "西安财经学院"),"soyoungboy");  
则对应的OtherActivity中接收的改为:
  1. //此处获取发送事件的内容
  2. 1 //此处获取发送事件的内容
    2     @Subscriber(tag = "soyoungboy")
    3     void showToast(User user) {
    4         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG).show();
    5     }

     

框架对应Demo中有这样一句话:
不同组件 (Activity、Fragment、Service等)、不同线程之间都可以通过事件总线来发布事件,它是线程安全的。
 * 只要发布的事件的参数类型和tag都匹配即可接收到事件.   
 

 

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