EventBus的Post方法发送事件

例:

EventBus的Post方法发送事件_第1张图片

组件与组件之间的传递代替Intent,线程间的通讯代替handler



加依赖:

dependencies {
    compile 'org.greenrobot:eventbus:3.0.0'
}

加权限:



MainActivity

/**
 * 创建Module,关联EventBus框架,创建第2Activity
 * 

* 完成Module的布局及控件的初始化 *

* 注册EventBus,解除EventBus注册 *

* 创建EventBus消息类,设置属性 *

* 使用EventBusPost方法发送事件 *

* 根据消息类,接收事件 * * 组件与组件之间的传递代替Intent,线程间的通讯代替handler */ public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button button; private TextView tv_title; private EventBus mEventBus; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //得到EventBUs对象 这里可以newEventBUs,感兴趣的可以调研 mEventBus = EventBus.getDefault(); //注册EventBus,关于源码我只强调一点:EventBus拿到订阅方法,就两种手段:1.注解 2.反射 mEventBus.register(this); } @Override protected void onDestroy() { super.onDestroy(); //解除EventBUs注册 mEventBus.unregister(this); } /** 注重过程,接受结果 * 接收发送过来的消息 //提示:在写接收消息方法,方法名自定义,权限必须是public,参数必须和发送消息的消息类一致 * 注释:方便人的阅读 注解: * ThreadMode.MAIN表示这个方法在主线程中执行 * 提示,发送方的线程也会影响到接收方 */ @Subscribe(threadMode = ThreadMode.MAIN) public void eBSAEventBus(EBMessage ebMessage){ //使用咱们接收过来的消息 tv_title.setText(ebMessage.Message); Log.d("EventBusThread","MAIN"+Thread.currentThread().getName()); } // @Subscribe(threadMode = ThreadMode.POSTING) // public void eBSAEventBus1(EBMessage ebMessage){ // Log.d("EventBusThread","POSTING"+Thread.currentThread().getName()); // } // // @Subscribe(threadMode = ThreadMode.ASYNC) // public void eBSAEventBus2(EBMessage ebMessage){ // Log.d("EventBusThread","ASYNC"+Thread.currentThread().getName()); // } // // @Subscribe(threadMode = ThreadMode.BACKGROUND) // public void eBSAEventBus3(EBMessage ebMessage){ // Log.d("EventBusThread","BACKGROUND"+Thread.currentThread().getName()); // } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button: // startActivity(new Intent(this,EventBusSendActivity.class)); new Thread(){ public void run() { mEventBus.post(new EBMessage("我是子线程里信息,现在到主线程去展示")); }; }.start(); break; } }

activity_main

xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button"
        android:text="跳转到发送页面的Activity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"/>
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"/>
RelativeLayout>


EBMessage  创建EventBus消息类,设置属性

/**
 * 消息类,一个容器,负责存放一些数据,方便我们传到另一个地方,获取信息
 */

public class EBMessage {
    public  String Message;
    public EBMessage(String message) {
        Message = message;
    }
}


EventBusSendActivity

public class EventBusSendActivity extends AppCompatActivity {

    String mString = "1601Rnb,月薪过万";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_event_bus_send);
    }

    public void send(View view){
        //4.咱们把第二个页面里面的数据,发送给主页面接收,参数也必须是和消息类一致方可
        EventBus.getDefault().post(new EBMessage(mString));
        finish();
    }
}
activity_event_bus_send  布局:
xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_event_bus_send"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:onClick="send"
        android:text="向主页面使用EventBus发送一个事件"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
RelativeLayout>


你可能感兴趣的:(EventBus)