EventBus通信

需求:

1.ActivityA打开ActivityB

2.在B中执行某操作后,同时执行A中的方法

lib下载:eventbus-2.4.0.jar  jmmy

1.在EventBusTestActivity注册eventBus

EventBus.getDefault().register(this);// 注册广播

2.点击事件跳转

Intent intent = new Intent(getApplicationContext(),EventBusTest2Activity.class);
startActivity(intent);

3.在EventBusTest2Activity中发送广播

EventBus.getDefault().post(new MyEvent("Message From EventBusTest2"));

4.EventBusTestActivity接收广播

// onEvent会放在发送事件的那个线程中去执行,不能进行UI更新
    public void onEvent(MyEvent event) {
        Log.i("What", "[onEvent]My Thread is "
                + Thread.currentThread().getName());
    }

// onEventMainThread就是会放到主线程去执行的事件处理,一般在其中进行比如UI的更新的操作
    public void onEventMainThread(MyEvent event) {
        Log.i("What", "[onEventMainThread] Thread is "
                + Thread.currentThread().getName());
        test1.setText("测试完成");
    }

5.解除广播

protected void onDestroy() {
  super.onDestroy();
  EventBus.getDefault().unregister(this);// 解除
}

下面贴上源码:

package com.example.activity;

import com.example.event.MyEvent;

import de.greenrobot.event.EventBus;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class EventBusTestActivity extends Activity implements OnClickListener {
    private Button test1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_bus_test);
        test1 = (Button) findViewById(R.id.test1);
        test1.setOnClickListener(this);
        EventBus.getDefault().register(this);// 注册广播
    }

    // onEvent会放在发送事件的那个线程中去执行,不能进行UI更新
    public void onEvent(MyEvent event) {
        Log.i("What", "[onEvent]My Thread is "
                + Thread.currentThread().getName());
    }

    // onEventMainThread就是会放到主线程去执行的事件处理,一般在其中进行比如UI的更新的操作
    public void onEventMainThread(MyEvent event) {
        Log.i("What", "[onEventMainThread] Thread is "
                + Thread.currentThread().getName());
        test1.setText("测试完成");
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.test1:
            Intent intent = new Intent(getApplicationContext(),
                    EventBusTest2Activity.class);
            startActivity(intent);
            break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);// 解除
    }
}
package com.example.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

import com.example.event.MyEvent;

import de.greenrobot.event.EventBus;

public class EventBusTest2Activity extends Activity {
    private Button click1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_bus_test2);

        click1 = (Button) findViewById(R.id.click1);
        click1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(
                        new MyEvent("Message From EventBusTest2"));
            }
        });
    }
}
时间: 2024-10-05 19:11:59

EventBus通信的相关文章

Android组件间通信——EventBus

在Android开发中,组件间通信一直是一个不可忽视的部分.当然,组件之间的通信有很多种方式可以选择,本文就利用EventBus通信的方式进行论述. EventBus是一个第三方框架,它的简单使用分为如下几步: 1. 下载框架源码,并导入工程中. 下载地址:https://github.com/greenrobot/EventBus 如果需要看如何导入并依赖工程,请转到另一篇博文:<Eclipse导入所依赖的Android项目> 2. 定义事件类,并广播事件 例如下面这个自定义事件类Messa

vue中通信方式

vuex中共享state 父子组件emit/on 跨组件event bus 跨组件eventbus通信 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/

Android学习之获取系统应用信息列表的实现

前言: 好几天电脑打不开CSDN博客,也不知道怎么回事,今天下班回来突然能打开了,遂将周末实现的一个效果贴上. 实现功能: 获取手机应用图标,名称,时间(安装时间/更新时间),大小,侧滑删除应用,点击应用图标分享等功能. 目标效果: 思路:RecylerView+swipereveallayout 贴上dependencies 介绍:Glide实现图片加载,EventBus通信,swipereveallayout实现侧滑. 获取数据源: private ArrayList<AppInfoMode

快速Android开发系列通信篇之EventBus

概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间的通信.比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过**EventBus**实现. 作为一个消息总线,有三个主要的元素: Event:事件 Subscriber:事件订阅者,接收特定的事件 Publisher:事件发布者,用于通知Subscri

【Android高级】Android组件间通信库EventBus学习

最近偶然在论坛上看了一个比较厉害的库EventBus,感觉使用起来很爽,不用考虑在Activity还是Fragment,不用担心是不是UI线程,随便怎么通信都行,有网友笑说这简直是Android开发中的第五大组件,通信起来像广播那样神通,但又比广播轻量级多了,所以在这里记下来,以后开发就方便多了. 项目地址:https://github.com/greenrobot/EventBus EventBus主要特点 1. 事件订阅函数不是基于注解(Annotation)的,而是基于命名约定的,在And

Android组件间通信框架EventBus

事件总线EventBus模式概述 在不使用事件总线的情况下: 在应用中的多个地方,控件经常需要根据某个状态来更新他们显示的内容.这种场景常见的解决方式就是定义一个接口,需要关注该事件的控件来实现这个接口.然后事件触发的地方来注册/取消注册这些对该事件感兴趣的控件.例如,陌陌依赖手机位置信息来获取附近的用户,所以在位置更新管理器(MmLocationManager)中定义了一个接口来监听位置更新的事件(MmLocationListener): interface MmLocationListene

EventBus作为组件之间通信

1.为何要使用EventBus? 一般我们在不同activty等组件之间通信的时候,都用到了如下的模式: 就是定义一个接口,需要关注该事件的地方来实现这个接口.然后事件触发的地方来注册/取消注册这些对该事件感兴趣的控件,比如如下文章描述的情况: 使用Event Bus模式解耦Android App组件间通信 这样做的问题也是显而易见的,就是不同组件之间往往耦合的比较厉害,越来越多的接口也维护很麻烦,这样就需要用到EventBus模式来解决组件之低耦合的间通信 2.EventBus类库介绍 Eve

vue2.0s中eventBus实现兄弟组件通信

在vue1.0中,组件之间的通信主要通过vm.$dispatch沿着父链向上传播和用vm.$broadcast向下广播来实现.然而在vue2.0中,已经废除了这种用法. vuex加入后,对组件之间的通信有了更加清晰的操作,对于中大型的项目来说,一开始就把vuex的使用计划在内是明智的选择. 然而在一些小型的项目,或者说像我这样写到一半才发现vue2.0用不了$.broadcast和$dispatch的人来说,就需要一个比较便捷的解决方法.那么,eventBus的作用就体现出来了. 主要是现实途径

【开源项目11】组件间通信利器EventBus

概述及基本概念 **EventBus**是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间.组件与后台线程间 的通信.比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求 都可以通过**EventBus**实现. 作为一个消息总线,有三个主要的元素: Event:事件 Subscriber:事件订阅者,接收特定的事件 Publisher:事件发布者,用于通知Subsc