这边文章写在睡觉前,所以我会写的很快。
首先我没用过EventBus,但是我看过它的使用介绍。
大概是这样用的:
EventBus.getDefault().register(this);
EventBus.getDefault().post(messageEvent);
EventBus.getDefault().unregister(this);
好的,一个非常经典的观察者模式。
注册,发送事件,取消注册。
然后我们自己来实现一下。
首先我们写一个自己的MyEventBus:
public class MyEventBus {
static MyEventBus myEventBus;
static List<EventListener> listeners = new ArrayList<>();
private MyEventBus(){
}
public static MyEventBus getDefault(){
if(myEventBus==null){
return new MyEventBus();
}else {
return myEventBus;
}
}
public void register(EventListener eventListener){
listeners.add(eventListener);
}
public void unregister(EventListener eventListener){
listeners.remove(eventListener);
}
public void post(String message){
for(EventListener eventListener:listeners){
eventListener.getMessage(message);
}
}
}
MyEventBus是个单例,有个静态的List<EventListener>管理注册的类。还有个post方法用来发送消息。
EventListener如下:
public interface EventListener {
void getMessage(String message);
}
一个接口,有个getMessage方法用来接收post的信息。
MainActivity:
public class MainActivity extends AppCompatActivity implements EventListener{
TextView textView;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.text_view);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
MyEventBus.getDefault().register(this);
}
@Override
public void getMessage(String message) {
textView.setText(message);
}
@Override
protected void onDestroy() {
super.onDestroy();
MyEventBus.getDefault().unregister(this);
}
}
SecondActivity:
public class SecondActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
Button button = findViewById(R.id.send_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyEventBus.getDefault().post("你好呀,MainActivity");
finish();
}
});
}
}
MainActivity注册到了MyEventBus的List中,一旦调用了post方法,MainActivity的getMessage(String message)就会收到post过来的方法。
SecondActivity中调用了post方法,它会把信息发给所有注册者,在这里就是我们的MainActivity。
效果如下:
总结:
以上就是EventBus的超超超简化版,很简单对不对,不过EventBus的源码当然不会这么简单,但是我觉得核心思想就是观察者模式。
对一个开源框架,我们要了解它的内涵,而不是拿来用,觉得哇好帅啊,就完事了。我们可以看看它的介绍,然后想想如果是自己去写一个类似的框架,你会怎么写。
就是这样,晚安~