public class MainActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(getApplicationContext(), Main2Activity.class)); } }); } @Subscribe(threadMode = ThreadMode.MAIN,sticky = true) public void getMessage(MessageEvent messageEvent) { String message = messageEvent.getMessage(); System.out.println(message); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); } }
public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); MessageEvent messsge = new MessageEvent("消息"); EventBus.getDefault().postSticky(messsge); } }
public class MessageEvent { private String message; public MessageEvent(String message){ this.message=message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
让代码高度解耦,
粘性事件:Sticky的形式发送的事件,在注册对象也要通过Sticky的形式进行处理事件
在FirstActivity发送事件,到SecondActivity中做事件的处理。如果是使通过EventBus.getDefault.post(xx)发出的,在SecondActivity是接收不到消息的。 主要原因是SecondActivit用于接收消息的EventBus还未完成注册,也就是发布者发了消息,但订阅者还未产生。