今天下午没事学习了一下eventbus,写了一个小demo,
总结出来以下几点:
ThreadMode.BACKGROUND ==== 如果发生者处于UI线程中,则转到子线程
ThreadMode.MAIN ==== 始终处于UI线程中
1 /** 2 * Created by Administrator on 2017/9/1. 3 */ 4 5 public class MessageEvent { 6 private String message; 7 private String name; 8 private String pass; 9 10 public MessageEvent(String message) { 11 this.message = message; 12 } 13 public MessageEvent(String name,String pass) { 14 this.name = name; 15 this.pass = pass; 16 } 17 18 public String getMessage() { 19 return message; 20 } 21 22 public void setMessage(String message) { 23 this.message = message; 24 } 25 26 27 public String getName() { 28 return name; 29 } 30 31 public String getPass() { 32 return pass; 33 } 34 }
先建立一个消息处理类
在需要接受消息的Activiy界面写下如此方法
1 @Subscribe(threadMode = ThreadMode.BACKGROUND) 2 public void onEvent(MessageEvent event) { 3 //Log.d("harvic", "OnEvent收到了消息:" + event.getMessage()); 4 Toast.makeText(this, "你登陆成功了吗,就回来="+event.getName()+",==密码="+event.getPass(), Toast.LENGTH_SHORT).show(); 5 }
发送消息
1 butt_ond.setOnClickListener(new View.OnClickListener() { 2 @Override 3 public void onClick(View view) { 4 EventBus.getDefault().post(new MessageEvent("你要传递的数据")); 5 } 6 });
还有一个最重要的地方,不要忘记注册哦
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_video); 4 EventBus.getDefault().register(this); 5 }
在Activity的onCreate里面注册eventbus,
这样就完成了在一个页面中传递消息
接下来我们将在两个不同的页面发送接收数据,
在不同的页面传递消息使用
1 EventBus.getDefault().postSticky(new MessageEvent(userName,userPass));
接收消息使用
/** * 发生粘性事件 * @param messageEvent */ @Subscribe(sticky = true) public void XXX(MessageEvent messageEvent) { Toast.makeText(this, "你登陆成功了吗,就回来="+messageEvent.getName()+",==密码="+messageEvent.getPass(), Toast.LENGTH_SHORT).show(); }