`
砺雪凝霜
  • 浏览: 155515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

开源框架EventBus(一)

阅读更多

                                    开源框架EventBus(一)

1 什么事EventBus 

      EventBus是一个android事件发布/订阅的高性能框架,主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。优点是开销小,代码更简洁优雅,事件发布者和事件接收者之间的耦合度更小。如果您目前的项目的逻辑非常复杂,例如组件、线程之间大量传参,频繁使用广播的话维护起来比较吃力的话,或许EventBus是一个非常好的选择。

2 优点

  • 可以简化android组件(activity、service、broadcast)以及后台线程之间的通讯
  • 减少事件发布者和接收者之间的耦合度
  • 可以避免使用复杂的逻辑、减少事件发送者和接收者之间易错的依赖,避免由于组件生命周期带来的一系列问题
  •  使用非常简单
  • 效率非常高
  • 轻量级(jar小于50k)
  • 目前有1000W的app在使用
  • 先进的功能例如:线程调度,支持事件接收的优先级等

3 EventBus实战

3.1 定义一个事件类

package com.sohu.eventbustest;
/**
 * Created by yuliu207272 on 2015/5/15.
 */
public class MessageEvent {
    private String msg;
    public MessageEvent(String msg) {
        this.msg = msg;
    }
    public String getMsg(){
        return msg;
    }
}
 

3.2 在activity中的onCreate()方法中注册事件

EventBus.getDefault().register(MainActivity.this);

3.3 定义接收消息的方法

  public void onEvent(MessageEvent event){
        String msg = event.getMsg();
        tvText.setText(msg);
        Log.e(Tag, msg);
    }
 查阅EventBus官方文档可知
       接收事件规定有4种
       onEvent 使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作如果执行耗时操作容易导致事件分发延迟。声明下,app中所有的Activity都是在主线程中绘制的。
     onEventMainThread使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
       onEventBackgroundThread: 使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
     onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行
mainActivity:
public class SendMessageActivity extends Activity {
    private EditText etText;
    private Button btnSend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send_message);
        etText = (EditText)findViewById(R.id.et_text);
        btnSend = (Button)findViewById(R.id.btn_send);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!TextUtils.isEmpty(etText.getText())){
                    String sendMessage = etText.getText().toString();
                    EventBus.getDefault().post(new MessageEvent(sendMessage));
                }
            }
        });
    }
}
注意:方法中接收的MessageEvent和后面post方法中MessageEvent必须要是一种类型才能接收到消息

3.4 发送消息

    再新建一个SendMessageActivity,里面一个输入框输入要发送的消息,点击发送后,MainActivity就会收到消息了。
SendMessageActivity:
public class SendMessageActivity extends Activity {
    private EditText etText;
    private Button btnSend;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_send_message);
        etText = (EditText)findViewById(R.id.et_text);
        btnSend = (Button)findViewById(R.id.btn_send);
        btnSend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!TextUtils.isEmpty(etText.getText())){
                    String sendMessage = etText.getText().toString();
                    EventBus.getDefault().post(new MessageEvent(sendMessage));
                }
            }
        });
    }
}
 
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.sohu.eventbustest.SendMessageActivity">
  <EditText
      android:id="@+id/et_text"
      android:layout_width="fill_parent"
      android:layout_height="60dip" />
    <Button
        android:gravity="center"
        android:textSize="18sp"
        android:textColor="#000000"
        android:id="@+id/btn_send"
        android:layout_width="match_parent"
        android:layout_height="60dip"
        android:text="发送消息"/>
</LinearLayout>

3.4 测试结果

    在SendMessageActivity中的EditText中输入:eventBus message from MrLiu,点击发送后,按返回键,在MainActivity查看
  • 大小: 33.4 KB
  • 大小: 58.2 KB
0
0
分享到:
评论

相关推荐

    Android中使用开源框架eventbus3.0实现fragment之间的通信交互

    在之前的博文中简单介绍过如何实现fragment之间的信息交互:《Android中Fragment与Activity之间的交互(两种实现方式)》,今天继续给大家介绍一种可以实现此效果的另外一种方式EventBus。(相比于handler,接口回调...

    BAT大牛 带你深度剖析Android 10大开源框架

    十大Android开源框架源码学习:rxjava,picasso,okhttp,retrofit,glide,butterknife,eventbus,dagger2等等。

    android开源框架源码分析

    今天,我们将对 Android 开源框架源码进行分析,涉及的内容包括 EventBus、Glide、OkHttp、Android 事件分发等多个 Android 框架的源码解析。 EventBus 源码分析 EventBus 是一个非常流行的 Android 事件总线框架...

    各种开源框架Android

    总的来说,这些开源框架的整合使得Android开发更加高效和便捷,它们各自专注于解决特定问题,共同构建了一个强大的开发生态系统。开发者可以根据项目需求选择合适的框架组合,以实现最佳的开发体验和应用性能。

    C#版本EventBus事件总线实例源码(经典)

    在软件开发中,事件总线(EventBus)是一种设计模式,用于在组件之间解耦通信,使得各个组件可以独立地发布和订阅事件,而无需直接引用对方。C#作为.NET框架的主要编程语言,同样支持实现事件总线的概念。下面将详细...

    Android开源框架EventBusAndroid.zip

    好了,既然能想到这个设计模式,那么就来看一个屌爆天的Android开源框架EventBus。主要功能是替代Intent、Handler、BroadCast在Fragment、Activity、Service、线程之间传递消息。他的最牛逼优点是开销小,代码简洁,...

    【06】开源框架.7z

    开源框架在IT行业中扮演着至关重要的角色,尤其是在安卓开发领域。开源框架的广泛使用促进了技术创新,降低了开发成本,同时也增强了代码的可维护性和复用性。在这个“【06】开源框架.7z”压缩包中,我们很可能是...

    Android 开源框架源码解读.txt

    第1章 课程介绍 第2章 Okhttp网络库深入解析和相关面试题...第8章 eventbus异步框架源码解析 第9章 dagger2依赖注入框架源码解析 第10章 rxjava异步框架源码解析 第11章 picasso图片框架源码解析 第12章 课程总结

    Android开源框架源码分析

    本篇内容将对在面试中常问的几种Android开源框架源码进行详解,包括EventBus、Retrofit、RxJava、Volley以及okHttp和Binder机制。 首先,EventBus是一种发布/订阅事件总线框架,它简化了Android组件之间的通信,...

    Android10大开源框架视频讲解.rar

    【Android 10大开源框架视频讲解】是一个压缩包,其中包含了关于Android开发中十个重要开源框架的视频教程。这些框架对于深入理解Android应用开发、提高开发效率和优化代码质量至关重要。以下是这些开源框架的详细...

    android借助EventBus传递事件

    EventBus是一个非常强大的开源框架,可以同线程,跨线程传递事件,利用反射机制触发。总所周知,安卓无法在子线程中操控ui控件,此框架可以解决这个问题,而且在大项目,非常频繁的需要跨线程传递事件的时候,方便的...

    面向C++11的轻量级同步事件框架

    本项目试图创建一个简单、轻量级的事件框架,可以轻松地适应任何C++11项目。唯一的要求是支持C++11和访问标准C++库的编译器。它的灵感来自于几个公共事件API的设计,比如Google的Web Toolkit和流行的游戏修改框架中...

    android开源框架jar包+工具包

    "android开源框架jar包+工具包"是一个集合了多种实用工具的资源,旨在帮助开发者更快地完成项目,优化编码体验。以下将详细介绍其中的一些关键知识点: 1. **MD5加密工具包**: MD5(Message-Digest Algorithm 5)...

    事件总线框架AndroidEventBus.zip

    这是一个Android平台的事件总线框架, 它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁,耦合性更低,提升我们的代码质量。在往下看之前,你可以考虑...

    Android优秀热门开源开发框架合集(7个)

    以下是我对这个"Android优秀热门开源开发框架合集(7个)"的详细解读。 首先,我们要理解Android开发框架的核心价值——它们提供了标准化的结构,模块化的组件,以及丰富的功能库,帮助开发者快速构建复杂的应用。...

    Android非常实用的开源项目框架

    "Android非常实用的开源项目框架"这个标题所指的,很可能是作者分享的一些优秀的、适用于Android开发的开源框架或者工具库,通过这些框架,开发者可以快速构建出功能强大的应用程序。 描述中提到的链接指向了一个...

    最值得学习的10大开源框架,高级工程师必备。

    根据提供的文件信息,本文将对提到的“最值得学习的10大开源框架”进行详细介绍。这些框架在Android开发领域内具有重要的地位,是高级工程师不可或缺的技术储备。 ### 一、网络框架 #### 1. OkHttp **简介**:...

    牛逼的开源android框架

    "牛逼的开源android框架"这个标题暗示我们即将探讨的是一些备受赞誉且功能强大的Android开源框架。这些框架不仅在性能上表现出色,而且在社区支持和持续更新方面也具有优势。 首先,我们来谈谈Android开发中的四大...

Global site tag (gtag.js) - Google Analytics