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

最近再看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都匹配即可接收到事件.

时间: 2025-01-04 23:16:47

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

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

发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方: 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.Even

0807&mdash;MapReduce的第一篇学习笔记

http://blog.csdn.net/v_july_v/article/details/6637014 1 2 3 4 0807—MapReduce的第一篇学习笔记

Android事件总线 ( AndroidEventBus ) 框架发布

AndroidEventBus AndroidEventBus是一个Android平台的事件总线框架, 它简化了Activity.Fragment.Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量. 在往下看之前,你可以考虑这么一个场景,两个Fragment之间的通信你会怎么实现? 按照Android官方给的建议的解决方法如下: Communicating with the Activity,思路就是Activity实现某个接

CSS px, em, 和rem; float以及clear(第一篇学习)

px:相对长度,相对于屏幕分辨率: em:相对长度单位,相对于当前对象内文本的字体尺寸.如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸.  任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为 16px*62.5%=10px, 这样 12px=1.2em, 10px=1em

&quot;浅谈Android&quot;第一篇:Android系统简介

近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的学习,知识杂乱无章,没有条理和总结.因此,想想我是否可以尝试的写些文章,来对自己之前学过的知识和工作经验进行归纳和整理,整理出自己的知识体系呢.所以,就有这篇文章的诞生,如果其中理解不到位的地方,望园里的兄弟姐妹给予指出错误,我们共同讨论,一起进步.我一直相信一句话,好东西要分享,不断地分享,直至温暖整个世界

第一篇 关于Android Studio的快捷键

公司最近要培训Android的课程,但是发现现在官方网站上已经不提供了Eclipse ADT的下载了,都变成了Android Studio,可能是悲催了! 对于很多Eclipse转过来的同学,不适应的最主要就是快捷键部分了,Studio默认的快捷键和Eclipse差别很大,但是Studio强大的地方在 于通过设置你可以一直沿用Eclipse风格的快捷键,这样对于那些Eclipse过渡来的同学省了很多学习成本. ? ? Preferences -> Keymap 然后就可以选择你想要的快捷键,这里

第一篇 学习机器学习,从零开始准备

 写在最开始:学了几个月,看了很多建议,走了不少弯路,不忘初心,坚持到底! 以下内容以及接下来的 [机器学习] 系列随笔会记录下我的学习路程,希望对各位有所帮助. 学习原因:危机感 学习准备: 1.下载安装了python 2.7, 后来换成了python3.0,安装各种库累的半死然后下载anaconda一次性搞定,然后python入门,略 2.下载安装了octave,然后看了一份octave入门,在看吴恩达coursera的课程之前,竟然不知道有如此简洁苗条的matlab替代品! 3.找了一堆学

第一篇学习笔记

新的学期开始了在这个学期,在上学期的学习中,好多地方都没有学得很精,有很多很多的想法却都没法实现.最后,不得不去寻求其他小组的帮助. 现在,新的课程又开始了,英语本来就不怎么好的我每一次想看懂程序都得去查有道...不过,有了上一学期的铺垫,在接下来的这个学期里,想要懂程序变得不那么困难,我也更有信心去向着我的目标前进,争取学好本门课程. 期望:可以脱离资料自己编写一个小程序. 学习计划:去看一些自己感兴趣的程序的源代码,去分析每一块是干什么的,然后去尝试自己的小程序上实现~ 兴趣:觉得做一个程序

IO操作 第一篇 学习(转载)

问题8:如何使用通配符搜索指定目录内的所有文件: 解决方案: 使用DirectoryInfo.GetFiles方法的重载版本,它可以接受一个过滤表达式,返回FileInfo数组,另外它的参数还可以指定是否对子目录进行查找.如: dir.GetFiles("*.txt", SearchOption.AllDirectories); 问题9:如何复制.移动.重命名.删除文件和目录: 解决方案:使用FileInfo和DirectoryInfo类. 下面是FileInfo类的相关方法: Fil