這邊文章寫(xiě)在睡覺(jué)前据德,所以我會(huì)寫(xiě)的很快鳄乏。
首先我沒(méi)用過(guò)EventBus,但是我看過(guò)它的使用介紹棘利。
大概是這樣用的:
EventBus.getDefault().register(this);
EventBus.getDefault().post(messageEvent);
EventBus.getDefault().unregister(this);
好的橱野,一個(gè)非常經(jīng)典的觀察者模式。
注冊(cè)善玫,發(fā)送事件水援,取消注冊(cè)。
然后我們自己來(lái)實(shí)現(xiàn)一下茅郎。
首先我們寫(xiě)一個(gè)自己的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是個(gè)單例蜗元,有個(gè)靜態(tài)的List<EventListener>管理注冊(cè)的類(lèi)。還有個(gè)post方法用來(lái)發(fā)送消息系冗。
EventListener如下:
public interface EventListener {
void getMessage(String message);
}
一個(gè)接口奕扣,有個(gè)getMessage方法用來(lái)接收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注冊(cè)到了MyEventBus的List中惯豆,一旦調(diào)用了post方法池磁,MainActivity的getMessage(String message)就會(huì)收到post過(guò)來(lái)的方法。
SecondActivity中調(diào)用了post方法循帐,它會(huì)把信息發(fā)給所有注冊(cè)者框仔,在這里就是我們的MainActivity。
效果如下:
總結(jié):
以上就是EventBus的超超超簡(jiǎn)化版拄养,很簡(jiǎn)單對(duì)不對(duì)离斩,不過(guò)EventBus的源碼當(dāng)然不會(huì)這么簡(jiǎn)單,但是我覺(jué)得核心思想就是觀察者模式瘪匿。
對(duì)一個(gè)開(kāi)源框架跛梗,我們要了解它的內(nèi)涵,而不是拿來(lái)用棋弥,覺(jué)得哇好帥啊核偿,就完事了。我們可以看看它的介紹顽染,然后想想如果是自己去寫(xiě)一個(gè)類(lèi)似的框架漾岳,你會(huì)怎么寫(xiě)。
就是這樣粉寞,晚安~