• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > EventBus通信小能手,EventBus通信能手

EventBus通信小能手,EventBus通信能手

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了eventbus,eventbus使用,eventbus3.0,android eventbus,android eventbus使用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

EventBus通信小能手,EventBus通信能手


 1、EventBus简介

  EventBus 是由 greenrobot 组织开发的一个 Android 事件发布/订阅轻量级框架,特点:代码简洁,是一种发布订阅设计模式(观察者设计模式)。

EventBus 可以代替 Android 传统的 Intent, Handler, Broadcast或接口函数,在 Fragment, Activity, Service 线程之间传递数据,执行方法。

(可能线程间的简单通信看不出EventBus的优势,但是进程之间通信代码繁多,特别是复杂的数据格式,而EventBus能让通信变得简单)

2、EventBus的优势

  1.简化了组件间的通讯

  2.分离了事件的发送者和接受者

  3.在Activity、Fragment和线程中表现良好

  4.避免了复杂的和易错的依赖关系和声明周期问题

  5.使得代码更简洁,性能更好

  6.更快,更小(约50k的jar包)

3、EventBus大概原理

  1.EventBus底层采用的是注解和反射的方式来获取订阅方法信息(首先是注解获取,若注解获取不到,再用反射)1

  2.当前订阅者是添加到Eventbus 总的事件订阅者的subscriptionByEventType集合中

  3.订阅者所有订阅的事件类型添加到typeBySubscriber 中,方便解注册时,移除事件

 

4、使用步骤

  1.关联库  compile 'org.greenrobot:eventbus:3.0.0'  

  2.设置权限(需要联网,用于测试网络请求)  <uses-permission android:name="android.permission.INTERNET" />

  3. 注册  EventBus.getDefault().register(this); 

  4. 发送信息 EventBus.getDefault().post("这是发送了一条String语句"); 

  5. 接受信息

@Subscribe()  //里面什么都没有表示默认
    public void getInfo(String a) {
        Log.e("获取到的字符串:" ,a);   //String a  一般是定义为一个类,简单的话传String基本数据格式即可
    }  // public 不能换成 private

 6.退出时记得销毁注册 

@Override
    protected void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }

 

 

5、案例   demo 点击下载: http://www.cnblogs.com/wujiancheng

  测试主线程与子线程通信(在子线程中联网请求,在主线程中弹出从子线程发过来的信息),测试优先级,测试粘性的作用(Stickly)

 

1.线程间通信

发送信息为EventBus.getDefault().post(new XXX("http://www.tngou.net/api/memo/comment")); //这里的XXX要对应

那么接收信息的为

@Subscribe(threadMode = ThreadMode.ASYNC) 
  public void TestHttp(XXX event){ ......}

 

 

 

 

 

EventBus.getDefault().post("I am a String");

接收信息为

@Subscribe(threadMode = ThreadMode.ASYNC) 
 public void TestHttp(String info){ ......} //随便写个String 类型即可

 

 

 

 

 

 

  发送信息url给子线程

  @Override
        public void onClick(View view) {
            //发送信息
            EventBus.getDefault().post(new HttpEvent("http://www.tngou.net/api/memo/comment"));  //这里需要写一个解析的类,很简单只有两个节点
        }

 HttpEvent与HttpEvent2代码一样,如下:
public class HttpEvent {
    private String msg;

    public HttpEvent(String msg) {
        this.msg = msg;
    }

    public String getMsg(){
        return msg;
    }

}

 

子线程发送信息

//这里使用XUtils来请求网络,具体的可以下载demo查看
@Subscribe(threadMode = ThreadMode.ASYNC) public void TestHttp(HttpEvent event){ String jsonData = event.getMsg(); //联网请求 Log.e("线程名:" ,Thread.currentThread().getName()); org.xutils.x.http().get(new RequestParams(jsonData), new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Log.e("联网请求","联网成功==" + result); Gson gson = new Gson(); JsonData data = gson.fromJson(result,JsonData.class); //发送信息 EventBus.getDefault().post(new HttpEvent2(data.getMsg() +"-------"+ data.isStatus())); } @Override public void onError(Throwable ex, boolean isOnCallback) { Log.e("联网请求","联网失败,请检查网络"); } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); }

 

  接受信息并显示出来

@Subscribe(threadMode = ThreadMode.MAIN)
    public void getMessage(HttpEvent2 event2) {
        Toast.makeText(this,event2.getMsg(),Toast.LENGTH_SHORT).show();
        Log.e("线程名:" ,Thread.currentThread().getName());
    }

 

运行效果如下图:

  子线程请求联网,主线程得到信息,根据图下

    

 

 

 

  EventBus3.0 四种线程模式

1.@Subscribe(threadMode = ThreadMode.POSTING)

  订阅者执行的线程与事件的发布者所在的线程为同一个线程,也是EventBus默认的线程模式。



2.@Subscribe(threadMode = ThreadMode.MAIN)

  在Android的主线程中运行,不能执行一些耗时的任务。



3.@Subscribe(threadMode = ThreadMode.BACKGROUND)

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • EventBus通信小能手,EventBus通信能手
  • Android EventBus.getDefault()开源框架,eventbusgetdefault
  • Android中使用开源框架EventBus3.0实现Fragment之间的通信交互,fragment开源框架
  • EventBus简单使用教程
  • EventBus的使用,EventBus使用
  • 在 Android 上使用 RxNetty
  • EventBus初理解,EventBus理解

相关文章

  • 2017-05-26android经典Demo(转载),androiddemo
  • 2017-05-26深入了解android中的消息机制Handler
  • 2017-08-23关于 android canvas 的简单总结
  • 2017-05-26android下拉选择框spinner,android下拉spinner
  • 2017-05-26保持listview当前位置,listview当前位置
  • 2017-05-26[android] 手机卫士设备管理权限锁屏,android锁屏
  • 2017-05-26android View绘制源码分析
  • 2017-05-26Android 点击文字实现跳转,android跳转
  • 2017-05-26Android 6.0 运行时权限处理完全解析
  • 2017-05-26Android Studio安装,androidstudio安装

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android键盘事件,android键盘
    • Android--线程详解
    • 使用Android-Debug-Database 在浏览器中查看App的数据库,清科zdatabase数据库
    • 安卓高级组件-----网格视图,安卓-----网格
    • 自定义控件(一),自定义控件(
    • Kotlin中的“忍者”函数 —— 理解泛型的能力(KAD 12),kotlinkad
    • Remote Displayer for Android V1.0,displayerandroid
    • (试笔)一、Android四大框架之ContentProvider的学习与运用,实现SQLite的增删改查。,安卓sqlite增删改查
    • Android开发5:应用程序窗口小部件App Widgets的实现,androidwidgets
    • Android 工程集成React Native 0.44 注意点,androidreact

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有