版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/NianandShao/article/details/82261428
EventBus可以代替Intent Broadcast Handler在Activity Fragment Service线程之间传递数据
相关知识
四种ThreadMode
POSTING:post在什么线程发布,事件处理函数就在什么线程
MAIN:事件处理函数在UI线程运行
BACKGROUND:如果事件在UI线程发布,那么该事件处理函数就在新的线程运行,如果该事件在子线程发布,那么就在发布的子线程运行,该事件处理函数禁止更新UI
ASYNC:无论在什么线程发布,都会在新的线程运行
注册与注销
EventBus.getDefault().register(this) 注册
EventBus.getDefault().unregister(this) 注销
EventBus.getDefault().isRegister(this) 判断是否已注册 true 注册 false 没注册
扫描二维码关注公众号,回复:
3160196 查看本文章
建议注册在OnCreate 注销在OnDestroy 注册前先判断是否已注册
粘性事件
sticky 可以先发事件后注册
@Subscribe:事件订阅者,接收事件发布者的消息
@Publisher:事件发布者,直接调用EventBus.getDafault().post(obj)
注意:那里需要订阅就必须注册
普通事件
public class MainActivity extends AppCompatActivity {
private AppCompatButton btn_Event;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_Event = findViewById(R.id.btn_event);
btn_Event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,SecondActivity.class));
}
});
//注册
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(this);
}
}
//事件处理函数
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventFuc(Message message){
btn_Event.setText(message.getMessage());
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销
EventBus.getDefault().unregister(this);
}
}
public class SecondActivity extends AppCompatActivity {
private AppCompatButton btn_message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_message = findViewById(R.id.btn_message);
btn_message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发布事件
EventBus.getDefault().post(new Message("我发布事件啦"));
finish();
}
});
}
}
粘性事件
public class MainActivity extends AppCompatActivity {
private AppCompatButton btn_Event, btn_register;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_Event = findViewById(R.id.btn_event);
btn_register = findViewById(R.id.btn_register);
btn_Event.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
});
btn_register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//注册
if (!EventBus.getDefault().isRegistered(this)) {
EventBus.getDefault().register(MainActivity.this);
}
}
});
}
//事件处理函数
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEventFuc(Message message) {
btn_Event.setText(message.getMessage());
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销
EventBus.getDefault().unregister(this);
}
}
在处理函数多添加个sticky = true
public class SecondActivity extends AppCompatActivity {
private AppCompatButton btn_message;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
btn_message = findViewById(R.id.btn_message);
btn_message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发布事件
EventBus.getDefault().postSticky(new Message("我发布粘性事件啦"));
finish();
}
});
}
}