精华内容
下载资源
问答
  • 它是一个基于google-agera的android事件总线
  • 广播接收者后续和安卓事件总线粘性广播有序广播EventBus 粘性广播 特点:可以不用先执行注册 方法:sendstickyBroadcast 发送者 // An highlighted block public void sendBroadCastoOther(){ Intent intent = ...

    广播接收者后续和安卓 的事件总线

    粘性广播

    特点:可以不用先执行注册
    方法:sendstickyBroadcast

    发送者

    // An highlighted block
      public void sendBroadCastoOther(){
            Intent intent = new Intent(OtherActivity.action); //action
            intent.putExtra("name","粘性广播");
            sendStickyBroadcast(intent); //粘性广播
        }
    

    接收者

    // An highlighted block
    class SkityReceiver extends BroadcastReceiver{
    
            @Override
            public void onReceive(Context context, Intent intent) {
                if(intent.getAction().equals(action)){
                    Log.d("粘性内容",intent.getStringExtra("name")); //粘性广播
                }
            }
        }
    
    

    有序广播

    步骤:
    注册:多个receiver要使用一个action,设置优先级:priority
    发送有序广播:sendorderedBroadcast(intent,null)
    常用方法:
    setResultExtras(Bundle对象)设置携带值
    getResultExtras(true)获取Bundle对象
    abortBroadcast():终止有序广播,不在传递下去

    接收方
    这样的类可以多写几个,无所谓,但是清单文件中要叫在同一个action里面。可以设置优先级

    // An highlighted block
    public class MyReceiver2 extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("into","MyReceiver2");
            if(intent.getAction().equals("myreceiver4")){
                String name = intent.getStringExtra("name2");兵
                Log.d("MyReceiver2Info1-name:",name+"");
                Bundle bundle = new Bundle();
                bundle.putString("bag1","我我我");
                setResultExtras(bundle);
            }
    
        }
    }
    

    发送方

    // An highlighted block
     public void sendReceiver3(View view){
            Intent intent = new Intent("myreceiver3");
            intent.putExtra("name","我");
            sendBroadcast(intent);
    //        sendStickyBroadcast(intent);
        }
    

    EventBus

    用法:
    导依赖
    接收方注册:
    Oncreate(){
    EventBus。getDefault().register(this)
    }

    OnDistory(){
    EventBus.getDefault.unregister(this)
    }

    接收方方法
    @subribe(ThreadMode=ThreadMode.Mian.sticky=true)

    public void receiver(object o){
    o就是发送过来的值
    }

    发送方:
    EventBus.getDefault.post(任意数据类型):普通发送
    EventBus.getDefault.poststicky(任意数据类型):粘性发送

    展开全文
  • EventBus是的主要功能是替代Intent,Handler,BroadCast在Fragment,...1)Event:事件(乘客) 2)Subscriber:订阅者(目的地) 3)Publisher:发布者(汽车站) 另外还要注意的是线程模型(ThreadMode),待会儿

    EventBus是的主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息,优点是开销小,代码更优雅。以及将发送者和接收者解耦。

    三要素:

    1)Event:事件(乘客)

    2)Subscriber:订阅者(目的地)

    3)Publisher:发布者(汽车站)

    另外还要注意的是线程模型(ThreadMode),待会儿会讲。

    使用流程:

    1.添加依赖:

    compile 'org.greenrobot:eventbus:3.0.0'
    2.新建一个类来做为事件

    public class MyEventBus {
        private String msg;
        public MyEventBus(String msg) {
            this.msg = msg;
        }
        public String fristEvent(){
            return msg;
        }
    }
    3.监听事件:EventBus默认是一个单例,可通过getDefault()来获取。首先把作为订阅事件模块通过EventBus注册监听:

    EventBus.getDefault().register(this);
    并且要有一个接收事件的方法,添加Subscrible进行注解:

    @Subscribe(threadMode = ThreadMode.MAIN)
        public void onEventMainThread(MyEventBus eventBus){
            Toast.makeText(this,eventBus.fristEvent(),Toast.LENGTH_SHORT).show();
            textView.setText(eventBus.fristEvent());
        }
    在模块销毁或者不使用时要进行取消订阅,反注册一波:

    @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    4.发送事件,不需要进行注册,直接使用post发送就行,在需要发送事件的地方,调用post方法即可:

    EventBus.getDefault().post(new MyEventBus("B向A发了一条消息过来"));

    然后我们讲一下上面提到的线程模型ThreadMode他有四种模式:

    1)MAIN(最常用):无论在那个线程发布,事件都会在UI线程执行,该方法可以用来更新UI,但是要避免耗时操作。

    2)POSTING:发布线程与处理线程一致,若为UI线程才可以更新UI,所以处理的时候最好判断一下,不推荐在本方法更新UI。

    3)ASYNC:无论事件在那个线程发布,事件都会在新线程中执行,禁止更新UI。

    4)BACKGROUND:如果发布线程为UI线程,则处理线程会在新线程中,若在子线程中发布,则处理与发布线程一致,禁止更新UI。

    好了,关于eventbus简介基本上差不多了,大家可以试试,如有不对的地方请指出,谢谢!!!








    展开全文
  • Android优化的EventBus。简化Activities, Fragments, Threads, Services之间的通信等用更少的代码,实现更好的质量。
  • 事件总线

    2018-04-17 14:35:00
    EventBus (安卓优化的事件总线,简化了活动、片段、线程、服务等的通信,使用的App有:薄荷) Otto (一个基于Guava的增强的事件总线) HermesEventBus (一个基于EventBus的、能在进程间发送和接收event的库,在IPC...

    事件总线

    EventBus (安卓优化的事件总线,简化了活动、片段、线程、服务等的通信,使用的App有:薄荷)

    Otto (一个基于Guava的增强的事件总线)

    HermesEventBus (一个基于EventBus的、能在进程间发送和接收event的库,在IPC或者插件开发中非常有用)

    展开全文
  • 事件总线模式

    2018-05-28 11:17:00
    经过对多个有关事件总线模式的文档介绍的阅读,对事件总线模式有了一定的了解,并作出如下总结: 事件总线模式主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件总线...

    经过对多个有关事件总线模式的文档介绍的阅读,对事件总线模式有了一定的了解,并作出如下总结:

      事件总线模式主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件总线上的特定通道上。侦听器订阅特定的通道。侦听器会被通知消息,这些消息被发布到它们之前订阅的一个通道上。

    使用场景:安卓开发、通知服务

    优点:新的发布者、订阅者和连接可以很容易地添加。对高度分布式的应用程序有效。

    缺点:可伸缩性可能是一个问题,因为所有消息都是通过同一事件总线进行的。

    事件总线的处理流程:

      

      实例:事件总线模式是一种广泛运用于安卓开发之中的一种软件架构模式,而事件总线模式在安卓开发中最广泛的应用莫过于AndroidStudio提供的EventBus,所以我就EventBus来谈谈对事件总线模式的认识。

      EventBus是Android下高效的发布/订阅事件总线机制。作用是可以代替传统的Intent,Handler,Broadcast或接口函数在Fragment,Activity,Service,线程之间传递数据,执行方法。特点是代码简洁,是一种发布订阅设计模式(Publish/Subsribe),或称作观察者设计模式。我们可能对事物总线机制还是有点陌生,但是想必对23种软件设计模式之后的观察者模式应该很熟悉。事物总线模式就是观察者设计模式的一种,它的工作部件主要分为四种:事件源、事件监听器、通道和事件总线。它的主要工作原理:事件源将产生的消息发送到事件总线的特定通道之上,然后监听器在事先会订阅事务总线之中不同的通道以区分消息的响应,然后当消息被发送到事务总线的特定通道之中时,所对应的监听器会监听到消息,然后监听器根据程序中设置的响应函数进行执行。就好像一个Activity之中设置的Button一样,在xml文件中放入一个Button,然后在java类中设定OnEvent()函数,当Button被点击的时候,则会传出一个点击消息,然后按钮对应的Onclick()函数,监听到点击消息,从而执行OnListerner()之中的函数。

      那么下面我们结合具体的实例来分析事件总线模式,提到这个模式我们第一个想到的一定是Adroid开发之中的一个组件——Event Bus。Event Bus是Android Studio官方为我们提供的一个工具包。下面我们就根据一个具体的框架来对Event Bus进行讲解。

      我们想要实现的一个效果是,有两个acivity如图MainActivity:当点击"click"按钮的时候,就会跳转到secondActivity,而secondActivity里面有两个按钮,点击以后,可以改变MainActivity里面TextView的文字。

      要实现这样的效果无非是完成一个消息的传递,相当于我们的观察者模式中发布者发布的一个消息,然后订阅者通过特定的通道进行监听,最后实现消息的传递。

     

     首先是MainActivity:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class MainActivity extends FragmentActivity { 
       
        Button btn; 
        TextView text; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.activity_main); 
            EventBus.getInstance().register(this); 
            btn = (Button) findViewById(R.id.btn); 
            text = (TextView) findViewById(R.id.text); 
            btn.setOnClickListener(new View.OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    startActivity(new Intent(MainActivity.this,SecondActivity.class)); 
                
            }); 
        
       
        public void onEvent(Info i){ 
            Log.i("cky", i.msg); 
        
       
        public void onEventMain(Info i){ 
            text.setText(i.msg); 
        
       
        public void onEventMain(Info2 i){ 
            text.setText(text.getText()+i.msg); 
        
    }

      从上面我们可以看出MainActivity的创建函数onCreate函数中调用了EventBus的register(this)函数,用来注册。然后是onEvent(),这个方法里面的代码,会在一个子线程中执行一个是onEventMain(),这个方法里面的代码,会在UI线程执行。

      然后是SecondActivity

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class SecondActivity extends Activity { 
       
        Button btn2; 
        Button btn3; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.activity_second); 
            btn2 = (Button) findViewById(R.id.btn2); 
            btn2.setOnClickListener(new View.OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    EventBus.getInstance().post(new Info("信息1")); 
                
            }); 
            btn3 = (Button) findViewById(R.id.btn3); 
            btn3.setOnClickListener(new View.OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    EventBus.getInstance().post(new Info2("信息2")); 
                
            }); 
        
    }

      那么这些活动之中的“始作俑者”——EventBus类又是什么样的呢?

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class EventBus { 
        HashMap<Class<?>,ArrayList<Subscription>> subscriptionsByEventType = 
                new HashMap<Class<?>,ArrayList<Subscription>>(); 
        MainThreadHandler mainThreadHandler = new MainThreadHandler(this,Looper.getMainLooper()); 
        AsyThreadHandler asyThreadHandler = new AsyThreadHandler(this); 
       
        private final static EventBus instance = new EventBus(); 
        public static EventBus getInstance(){ 
               return instance; 
        
        private EventBus(){}; 
    }

      在这其中:

      register方法之中我们先获取了订阅者(例子中是MainActivity)的方法,找到onEvent开头的方法,获得它们的参数类型。然后判断subscriptionsByEventType是否有以这些参数类型为key的数据,如果没有,新建一个ArrayList<Subscription>。

      Subscription它代表一个订阅,拥有subsriber,也就是订阅者还有一个SubscriberMethod,这是订阅方法类。

      post()方法里面,如同我们上面所说,获取了参数类型,然后在subscriptionsByEventType中查询所有改类型对应的订阅Subscription对于Subscription,它有我们订阅类的所有信息。首先根据type判断是在主线程还是子线程执行,然后调用一开始讲到的两个类的实例就好了。

      invoke()其实只有一句话,就是调用了反射去执行方法。m是订阅方法,sub.subscriber就是订阅者,event就是post()方法传入的实体这样我们就在子线程中调用了这个方法了,相当于MainActivity主动调用这个方法。

      因为这个模式的使用较少所以网上可以找到的只有这一种实例,其实事件总线这个概念对你来说可能很陌生,但提到观察者(发布-订阅)模式,你也许就很熟悉。事件总线是对发布-订阅模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。

    http://www.cnblogs.com/sheng-jie/p/6970091.html这里是一个相关案例,如果大家看完本文还是不能理解可以去看一下。

    转载于:https://www.cnblogs.com/xhxdeblog/p/9099138.html

    展开全文
  • 软件架构——事件总线模式

    千次阅读 2018-05-21 16:55:00
    事件总线模式是一种广泛运用于安卓开发之中的一种软件架构模式,而事件总线模式在安卓开发中最广泛的应用莫过于AndroidStudio提供的EventBus,所以我就EventBus来谈谈对事件总线模式的认识。  EventBus是Android下...
  • 经过对多个有关事件总线模式的文档介绍的阅读,对事件总线模式有了一定的了解,并作出如下总结: 一、 事件总线模式主要是处理事件,包括4个主要组件:事件源、事件监听器、通道和事件总线。消息源将消息发布到事件...
  • Android事件总线设计(一) 我们通常在进行安卓设计的时候,不同的Activity,Fragment,Service等之间通讯一直是个不小的问题,用Intent以及Handler都觉得有一点麻烦,于是,为了简化以及更加高质量的完成通信,同时...
  • code小生,一个专注 Android 领域的技术平台公众号回复 Android 加入我的安卓技术群作者:tqzhang链接:https://www.jianshu.co...
  • 文章目录Android1 Okio & OkHttp1.1 Okio简介1.2 Okio的核心类1.2.1 Okio-ByteString1.2.2 Okio-Buffer...安卓开发者指南:https://developer.android.google.cn/guide 1 Okio & OkHttp 1.1 Okio简介 I/O ➢j
  • 事件总线模式是一种广泛运用于安卓开发之中的一种软件架构模式,而事件总线模式在安卓开发中最广泛的应用莫过于AndroidStudio提供的EventBus,所以我就EventBus来谈谈对事件总线模式的认识。  EventBus是Android下...
  • 主要包括 网络请求、图片加载、数据库、事件总线、缓存、权限管理、工具类 模块。 其中,网络请求使用Retrofit+RxJava实现,图片加载使用Glide实现(可替换),数据库使用GreenDao实现(可替换),事件总线使用...
  • 我本来想写但是在网上看了下感觉写得不如此作者写得好:前言:EventBus出来已经有一段时间了,github...相关文章EventBus使用详解EventBus源码解析 概述EventBus是针一款对Android的发布/订阅事件总线。它可以让我们很
  • 安卓app 框架

    2016-11-30 16:38:13
    事件总线:eventbus 网络请求:retrofit rxjava 数据存储:http://realm.io 数据解析:Gson,我知道它速度不快,但是太好用了 图片处理:PhotoViewsubsampling-scale-image-viewPhotoCropper 简单缓存:ASimpleCache ...
  • 介绍 经过最近的努力,将几个常用框架进行了封装,并抽成了一个安卓基础开发库...其中,网络请求使用Retrofit+RxJava实现,图片加载使用Glide实现(可替换),数据库使用GreenDao实现(可替换),事件总线使用E...
  • 广播是安卓四大组件之一,他可以帮助开发者实现进程间通信、线程间通信以及类似事件总线的解耦方式。在安卓系统中,从广播的作用范围来划分的话,可以分为本地广播和全局广播。本地广播是一种在应用进程内的广播方式...
  • 安卓OTTO框架浅析

    2015-11-05 10:45:19
    今天要介绍的是一个Android中使用得比较多的android 事件总线 EventBus模式的一个框架Otto。 Otto 官网: http://square.github.io/otto/ 一、Android Studio中配置Otto (Eclipse中直接下载jar包导入) 跟...
  • 项目集成了热门的开源库,并做了每个库的演示代码以及常用技术1.Fragment懒加载模式封装 2.Otto事件总线演示 3.Retrofit网络框架封装 4.MVP模式架构 5.greenDao数据库ORM框架 6.Android 6.0动态权限申请 7....
  • [ 安卓框架] EventBus

    2019-03-07 20:11:18
    1.简介 目录 1.简介 2.下载地址 ...EventBus是一个Android端优化的publish/subscribe消息总线,简化了应用程序内各组件间、组件与后台线程间的通信。比如请求网络,等网络返回时通过Handler或Broadc...
  • EventBus是一种用于Android的事件发布-订阅总线,由GreenRobot开发,Gihub地址是:EventBus。它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的...
  • EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件总线. 想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅...
  • 相信大多数开发者都使用过EventBus,作为事件总线通信库,如果你的项目已经加入RxJava和EventBus,不妨用RxBus代替EventBus,以减少库的依赖。 一、添加RxJava和RxAndroid依赖 //RxJava and RxAndroid compile...
  • EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件总线. 想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅...
  • EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件总线. 想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅...
  • EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件总线. 想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅...
  • EventBus是安卓(Java中也可以用)开发中非常流行的一个第三方库,是一种发布/订阅事件总线. 想必每个入了门的Android开发者都多少对EventBus有过了解,EventBus是一个Android事件发布/订阅框架,通过解耦发布者和订阅...
  • 提到EventBus,相信大多数安卓开发者都用过,它是一个为Android 设计的一个基于观察者模式的发布/订阅事件总线框架,将事件的接收者和发送者分开,简化了组件之间的通信操作,使用非常简单,源码实现只有一两千行,...

空空如也

空空如也

1 2 3 4 5
收藏数 90
精华内容 36
关键字:

安卓事件总线