看了网上大神门写的EventBus 写的使用, 我自己也用了用,确实蛮不错 , 依样画葫芦写一写
首先看一下最基础的使用
EventBus是什么 一个Android事件发布/订阅轻量级框架 一张图说明
作用 (百度)
-
简化了组件间的通讯。
-
分离了事件的发送者和接受者。
-
在Activity、Fragment和线程中表现良好。
-
避免了复杂的和易错的依赖关系和生命周期问题。
-
使得代码更简洁,性能更好。
-
更快,更小(约50k的jar包)。
我使用的EventBus版本
一、简单使用
package com.example.yangzhan.eventbustest;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "MainActivity";
private Button mButton;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EventBus.getDefault().register(this); //注册EventBus
mButton=findViewById(R.id.bt_try);
mTextView=findViewById(R.id.tv);
mTextView.setText("旗舰,测试EventBus");
mButton.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
String str=EventBus.getDefault().toString();
if (str != null) {
Log.d(TAG, "onStart: eventbus == "+str);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this); //解除注册
}
@Subscribe
public void onEventBus(MessageEvent messageEvent){ //EventBus 传过来的数据
String str="收到的消息 ="+messageEvent.getMessge();
Log.d(TAG, "onEventBus: ="+str);
mTextView.setText(str);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_try:
Log.d(TAG, "MainActivity onClick: ");
startActivity(new Intent(MainActivity.this,SecondActivity.class));
break;
}
}
}
注释上已经写好了MainActivity 这个类 作用是用来 接收 从 SecondActivity 传过来的数据的 @Subscribe 这个注解用于接收从别的地方传回来的数据,onEventBus()此方法 是自己命名的,当然 里面的参数 必须的传递过来的数据是一致的
package com.example.yangzhan.eventbustest;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import org.greenrobot.eventbus.EventBus;
public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
private Button mButton;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
mButton=findViewById(R.id.btn_first_event);
mButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_first_event:
EventBus.getDefault().post(new MessageEvent("这是由 secondActivity 发送的消息!!")); post传递数据
finish();
break;
}
}
}
这个SecondActivity 主要作用是用来发送post数据的
这里写了一个 MessageEvent 的javaBean 类用来做对象 传递, 也可以随便传递任意数据
public class MessageEvent {
private String messge;
public MessageEvent(String messge){
this.messge=messge;
}
public String getMessge() {
return messge;
}
public void setMessge(String msg){
this.messge=msg;
}
}
MainActivity 点击 BT_TRY 按钮 跳转 SecondActivity
点击FIRST EVENT 按钮 , 回到 MainActivity 切 textView 文言 已经改变了
二、线程模式
EventBus有 几种线程模式
这里就说下MAIN 这个是主线程
也就是必须放主线程也就是ui线程执行的
发送消息的地方改一下
得到结果和上面是一致的