国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > EventBus的使用(基于EventBus3.0,开发必备)

EventBus的使用(基于EventBus3.0,开发必备)

来源:程序员人生   发布时间:2016-06-07 17:38:27 阅读次数:2332次

EventBus3的使用(基于EventBus3.0事件总线,开发必备)

              很久没有写博客了,之前工作太忙了,好了,这次给大家带来Android开发中使用非常普遍,非常重要的开源框架EventBus(别名:事件总线);

这是1个github上面非常出名的开源项目,地址:点击打开链接查看EventBus

            下面是官方介绍,这里我先截个图,然后详解:

            

上面这个图就介绍了eventBus的大概情况,我这里大致翻1下:

              EventBus是对Android发布/定阅事件总线的优化。

 

            这个图非常直观的告知了我们EventBus的原理,其实就是发布者发送1个事件,这个事件通过事件总线找到对应的事件接受者,接受者接遭到了事件后就可以立即履行1些相应的操作(后面会给出1个详细使用的demo);

          事件总线...

             1、简化了组件之间的通讯

                         1.1  将事件发布者和接受者解耦

                         1.2  在Activities, Fragments, and 后台线程之间履行的非常好(也非常好用)

                         1.3  避免了复杂的和容易出错的依赖性和生命周期问题

             2、使你的代码简单(的确,非常简单,基本就1句话弄定)

             3、运行得非常快(确切)

             4、非常小(jar包最多50k)

             5、在app中已被使用了上亿次(这么多人在使用,你还没有用,就out了...) 

             6、具有先进的功能,如交付线程,用户优先级等。   

             

好了,上面简单介绍了EventBus,那末接下来就教大家怎样使用了


            豫备工作:在你的项目中的app那个Gradle中最后面的dependencies中添加EventBus,以下:

compile 'org.greenrobot:eventbus:3.0.0'

         只需要 3 步就可以完成使用:

        1、定义事件:

/** * 定义事件 */ public class MessageEvent { public final String message; public MessageEvent(String message){ this.message = message; } }

       2、准备事件接受者(需要处理事件的方法)

          事件接收者,Android, Activities and Fragments需要在他们的生命周期中进行注册和注销事件,只有注册了才能收到事件。范例代码以下:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注册事件 EventBus.getDefault().register(this); }

@Override protected void onDestroy() { //注销事件 EventBus.getDefault().unregister(this); super.onDestroy(); }
        这样当这个activity处于后台时,也能及时的更新界面上的显示数据。

      然后注册了以后,就需要1个方法来接收事件总线上面的事件了,请注意,EventBus 3方法名可以选择自由(没有EventBus 2这样的命名约定)。方法名前面还必须要有@Subscribe注释才行,示例代码以下:

//当1个事件被发送出来时,这个方法将被调用(主要使用这个方法) @Subscribe public void onMessageEvent(MessageEvent event){ Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); }

//当1个其他事件被发送出来出来时,这个方法将被调用(这个方法暂时还没有发现怎样用) @Subscribe public void handleSomethingElse(SomeOtherEvent event){ doSomethingWith(event); }
      3、在其他activity、fragment或后台线程发送事件,所有当前注册过接受者匹配事件的类型,将被接遭到,发送事件的代码以下:
EventBus.getDefault().post(new MessageEvent("Hello everyone!"));
        
        好了,到这里,就把EventBus3.0的基本使用方法介绍完了,那末有人可能有疑问了:怎样没有1个demo呢,不试1下怎样有说服力呢?
 好,接下来我就使用1个demo来介绍EventBus的使用方法;

       1、首先,我使用2个activity来演示EventBus,FirstActivity是事件接收者,SecondActivity是事件的发送者;
定义的事件以下:
package com.chengguo.eventbus; /** * 定义事件 * Created by seven on 2016/5/29. */ public class MessageEvent { public final String message; public MessageEvent(String message){ this.message = message; } }

      2、给FirstActivity注册事件总线,并处理事件,这里就是,当有匹配的事件时,显示Toast 并将消息更新到TextView中。

    
<pre class="java" name="code">package com.chengguo.eventbus; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; import android.widget.Toast; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; public class FirstActivity extends AppCompatActivity { private TextView mMessageText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //注册事件 EventBus.getDefault().register(this); setContentView(R.layout.first_activity); mMessageText = (TextView) findViewById(R.id.text_message); findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(FirstActivity.this,SecondActivity.class)); } }); } /** * 事件接受方法 * @param event */ @Subscribe public void onMessageEvent(MessageEvent event){ Toast.makeText(FirstActivity.this, event.message, Toast.LENGTH_SHORT).show(); mMessageText.setText(event.message); } @Override protected void onDestroy() { //注销事件 EventBus.getDefault().unregister(this); super.onDestroy(); } }


         3、SecondActivity发送消息,测试FirstActivity处于后台时,是不是能够接遭到消息,并处理数据。

package com.chengguo.eventbus; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import org.greenrobot.eventbus.EventBus; public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_activity); findViewById(R.id.btn_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new MessageEvent("您好!成功了!")); } }); } }


测试的gif图以下(成功了):


       通过上面1个小小的测试,我们知道了怎样使用EventBus,但是有些人就会问了,我们项目中到底有甚么好处呢?

使用处景是:当你要设置你的昵称或头像时,这个时候你从设置界面回到个人中心界面时,比如个人中心要显示你的昵称和头像,这个时候,如果你使用生命周期的onRestart()方法或onResume()方法来实时更新你的数据,但是这样就会使得你的app会出现卡顿之类的(实际开发经验),还有可能造成内存泄漏之类的。这个时候使用EventBus就非常方便,而且流程度非常好。还有人说了,使用接口不1样能够实现吗,但是EventBus为我们节省和很多代码,这不是很好吗。总之,强烈建议你在你的项目中使用它,由于它真的会使你开发非常方便。




生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生