从伊夫ntBus2.0 到 EventBus3.0

从伊夫ntBus2.0 到 EventBus3.0

EventBus3.0带你乐翻天

您还在为刷新ui伤透脑筋吗?你还在雕琢怎么利用接口回调或然handle来贯彻啊?假使您想到了运用观看者方式,那么叁个好屌的Android开源框架EventBus:首要意义是代表Intent、Handler、布罗德Cast在Fragment、Activity、Service、线程之间传递新闻。他的最牛逼优点是付出小,代码简洁,解耦代码。

只要您未有使用过eventBus那么很不满你失去了成都百货上千,可是并未有提到3.0的标准公布,使用未有怎么大分化只是性质越来越好。私家提议间接行使3.0.0的版本,也决不去行使2.4和3.0beta1的版本了

图片 1

看图说话:
EventBus是一款针对Android优化的通告/订阅(publish/subscribe)事件总线。

伊夫ntBus作为贰个音讯总线,有多少个重视的成分:

Event:事件。能够是随便档期的顺序的目的Subscriber:事件订阅者,接收特定的平地风波。在伊夫ntBus中,使用约定来钦点事件订阅者以简化使用。即全数事件订阅都都以以onEvent开首的函数,具体来讲,函数的名字是on伊夫nt,on伊夫ntMainThread,onEventBackgroundThread,on伊芙ntAsync那八个,那几个和
ThreadMode(下边讲)有关。 Publisher:事件公布者,用于文告 Subscriber
有事件发生。能够在肆意线程放肆地方发送事件,直接调用eventBus.post(Object)
方法,能够团结实例化 EventBus
指标,但貌似选用私下认可的单例就好了:伊夫ntBus.getDefault(),
依据post函数参数的项目,会自行调用订阅相应体系事件的函数。

前言

近日项目中关系要求在叁个Activity中关闭另一个Activity大概在叁个Activity中关闭多少个Activity的急需,不关乎到应用的淡出。本身第一想了部分方案,同有时间也查了有个别方案,就相继方案计算出比较适中的一种方案。

伊芙ntBus是一款针对Android优化的揭露/订阅事件总线。主要意义是代表Intent,Handler,布罗兹Cast在Fragment,Activity,Service,线程之间传递音讯.优点是付出小,代码更优雅,以及将发送者和接收者解耦。

伊夫ntBus框架中提到八个成分

订阅者,发表者,订阅事件,事件总线 

它们的涉及得以用合法的图表示:

图片 2

订阅者能够订阅多个事件,发送者能够发布任何事件,发布者同期也足以是订阅者。

哪些利用

合法给到四个步骤(伊夫ntBus in 4 steps):

(1)Define events://定义事件publicclassMessageEvent{ /* Additional
fields if needed */ }(2)Prepare subscribers//注册订阅者Registeryour
subscriber (inyour
onCreateorinaconstructor):eventBus.register(this);(3)Declare your
subscribingmethod://订阅事件的动作@Subscribepublicvoid
on伊夫nt(AnyEventTypeevent){/* Do something */};(4)Post
events://公布者发送事件eventBus.post(event);

(1)Define events://定义事件public class MessageEvent { /* Additional
fields if needed */ }(2)Prepare subscribers//注册订阅者Register your
subscriber (in your onCreate or in a
constructor):eventBus.register(this);

(3)Declare your subscribing method://订阅事件的动作@Subscribepublic
void on伊芙nt(Any伊芙ntType event) {/* Do something */};

(4)Post events://公布者发送事件eventBus.post(event);

在等级次序中,最重大行使的EventBus的办法有:

伊芙ntBus.getDefault().register(this);//订阅事件EventBus.getDefault().post(object);//发表事件EventBus.getDefault().unregister(this);//撤除订阅on伊夫nt:使用onEvent作为订阅函数,那么该事件在哪个线程发布出去的,onEvent就能在这几个线程中运作,也便是说发表事件和接收事件线程在同三个线程。on伊夫ntMainThread:无论事件在哪些线程公布出去的,始终在UI线程中试行订阅事件的操作。on伊夫ntBackground:无论事件在哪些线程发布出去的,始终在办事线程中实施订阅事件的操作。on伊芙ntAsync:使用那么些函数作为订阅函数,那么不论事件在哪个线程发表,都会创立新的子线程在施行onEventAsync.

先是在build.gradle中增加依赖:

compile ‘org.greenrobot:eventbus:3.0.0’

主页MainActivity代码如下:

public classMainActivityextendsAppCompatActivity{ private TextView
tv1,tv_status;

    @Override    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

       
EventBus.getDefault().register(this);//在近年来界面注册二个订阅者       
tv1=(TextView)findViewById(CRUISER.id.tv);

        tv_status=(TextView)findViewById(R.id.tv_status);

        findViewById(R.id.btn).setOnClickListener(new
View.OnClickListener() {

            @Override            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(),

                        LoginActivity.class);

                startActivity(intent);

            }

        });

    }

    @Subscribe          //订阅事件First伊芙nt    public  void
onEventMainThread(LoginSuccessdEvent event){

        String msg=event.getMsg();

       
tv_status.setText(“已登入,当前账号”+msg);//获取事件中传递的参数     
Toast.makeText(this, msg, Toast.LENGTH_LONG).show();

    }

    @Override    protected void onDestroy() {

        super.onDestroy();

        伊夫ntBus.getDefault().unregister(this);//撤消注册    }

}

签到分界面LoginActivity.java:

@Subscribe //订阅事件First伊芙nt public void
onEventMainThread(LoginSuccessd伊芙nt event){

        Log.i(“TAG”,”LoginSuccessdEvent”);

        LoginActivity.this.finish();//收到订阅事件随后关闭当前分界面   
    Toast.makeText(this, “finish”, Toast.LENGTH_LONG).show();

    }

在注册分界面RegistActivity:

//发布事件

EventBus.getDefault().post(newLoginSuccessdEvent(username));

概念贰个报到成功事件类LoginSuccessd伊芙nt
.java:

public class LoginSuccessdEvent {

    private String msg;

    public LoginSuccessd伊夫nt(String msg) {//事件传递参数       
this.msg = msg;

    }

    public String getMsg() {//抽出事件参数        return msg;

    }

    public void setMsg(String msg) {

        this.msg = msg;

    }

}

EventBus
是一款针对 Android 端优化的 publish/subscribe 消息总线。

40dcb91772af2cfb64dd9b2c4d0778f8.jpg

EventBus使用详解

图片 3

前言:

原先开垦直接在用
伊夫ntBus2.0,近年来想学点新东西,看到伊夫ntBus竟然出3.0了,看时光是已经有了,但直接没接触过,就学习深造,也会有意依旧无意谈谈本身在使用两个版本时,对它们的不及的感想。
开战从前先付一下源码地址:https://github.com/greenrobot/EventBus

EventBus使用手续

eventbus arch

介绍一下:

伊夫ntBus是由盛名的greenrobot出品的叁个用于Android中事件宣布/订阅的库。不难题说就是用以Fragment,Activity,Service,线程之间开始展览多少传递,它为开采者提供除了
intent、handler、boardcast这两种传递数据的办法之外的一种选拔,其亮点在于
大约不怎么消化摄取能源,並且代码优雅凝练。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图