EventBus 3.0: 入门使用及其使用 完全解析

Posted wzqnxd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EventBus 3.0: 入门使用及其使用 完全解析相关的知识,希望对你有一定的参考价值。

前言

EventBus是greenrobot再android平台发布的以订阅-发布模式为核心的开源库。
EventBus翻译过来是事件总线意思。可以这样理解:一个个(event)发送到总线上,
然后EventBus根据已注册的订阅者(subscribers)来匹配相应的事件,进而把事件传递给订阅者,
这也是观察者模式的一个最佳实践。

我们平常开发中,当遇到Activity与Activity、Activity与Fragment之间的通信,往往采用intent,又
或者线程之间用Handler进行通信,这样代码会复杂很多,而使用EventBus极大简化两个组件之间俺的通信问题,
而且效率极高。而EventBus升级到3.0版本后,开发者能够自定义订阅方法名字,而没必要
规定以“o‘n‘Event‘XX"开头的方法了,这样也自由化了很多,而且支持了粘性事件的分发等,因此学会使用EventBus3.0
对我们开发又极大的好处.
技术分享图片

例子

布局

activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/tv_text"
        android:textSize="20sp"
        android:text="@string/app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击打开新的Activity"
        android:id="@+id/secondActivityBtn"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="75dp" />

</RelativeLayout>

activity_second

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">
    <EditText
        android:id="@+id/et"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入要发送的消息"
        />
    <Button
        android:id="@+id/sendMessageBtn"
        android:text="发送消息"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

代码

public class MainActivity extends Activity {

    private TextView textView;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //注册成为订阅者
        EventBus.getDefault().register(this);
        textView = (TextView) findViewById(R.id.tv_text);
        button = (Button) findViewById(R.id.secondActivityBtn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }

    //订阅方法,当接收到事件的时候,会调用该方法
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(MessageEvent messageEvent){
        Log.d("cylog","receive it");
        textView.setText(messageEvent.getMessage());
        Toast.makeText(MainActivity.this, messageEvent.getMessage(), Toast.LENGTH_SHORT).show();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除注册
        EventBus.getDefault().unregister(this);
    }
}
public class SecondActivity extends Activity {
    private EditText et;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        et = findViewById(R.id.et);
        Button button = (Button) findViewById(R.id.sendMessageBtn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(TextUtils.isEmpty(et.getText().toString())){
                    Toast.makeText(SecondActivity.this, "请输入......", Toast.LENGTH_SHORT).show();
                    return;
                }else {
                    EventBus.getDefault().post(new MessageEvent(et.getText().toString()));
                    finish();
                }

            }
        });
    }
}

效果图

技术分享图片







以上是关于EventBus 3.0: 入门使用及其使用 完全解析的主要内容,如果未能解决你的问题,请参考以下文章

EventBus 3.0使用与源码分析

EventBus 3.0使用与源码分析

EventBus 3.0使用与源码分析

EventBus 3.0 源码简要分析

EventBus系列:Event Bus 3.0中索引Subscriber Index使用指南

EventBus 3.0源码解析