Andoid 总线设计 (一)

来源:互联网 发布:linux中chown r 编辑:程序博客网 时间:2024/06/05 21:02

以前没有用过 EvenBus ,在Andoid开发过程中 经常使用广播进行通信,
太麻烦了,后面发现了一个叫EvenBus的东西 终于可以减少 了好多广播事件。代码简单了,耦合度低了。Evenbus 确实是个好东西。

没有了解过的同学可以看看 EventBus

举个列子:
public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    // 注册EventBus    EventBus.getDefault().register(this);    startActivity(new Intent(this,SecondActivity.class));}@Overrideprotected void onDestroy() {    super.onDestroy();    // 反注册EventBus    EventBus.getDefault().unregister(this);}// 主线程调用@Subscribe(threadMode = ThreadMode.MAIN)public void eventBusMain(String str){    Log.i("TAG", "MAIN:"+str+" Thread="+Thread.currentThread().getId());}// 1.发布线程为主线程,新开线程调用// 2.发布线程为子线程,发布线程调用@Subscribe(threadMode = ThreadMode.BACKGROUND)public void eventBusBg(String str){    Log.i("TAG", "BACKGROUND:"+str+" Thread="+Thread.currentThread().getId());}// 在发布线程调用,默认值@Subscribe(threadMode = ThreadMode.POSTING)public void eventBusPosting(String str){    Log.i("TAG", "POSTING:"+str+" Thread="+Thread.currentThread().getId());}// 每次都新开线程调用@Subscribe(threadMode = ThreadMode.ASYNC)public void eventBusAsync(String str){    Log.i("TAG", "ASYNC:"+str+" Thread="+Thread.currentThread().getId());}

}

public class SecondActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_second);    EventBus.getDefault().post("from second activity mainThread: info");    Log.i("TAG", "Post thread="+Thread.currentThread().getId());    new Thread(new Runnable() {        @Override        public void run() {            EventBus.getDefault().post("from second activity childThread: info");            Log.i("TAG", "Post thread="+Thread.currentThread().getId());        }    }).start();}

}

在 SecondActivity 中调用
EventBus.getDefault().post(“from second activity childThread: info”);
在 MainActivity 对应 @Subscribe 方法就可以接收得到。
是不是很神奇,如果没有EvenBus 你只能用广播接收 了。

下一节 我们 简单的模拟一下 EvenBus 的实现。

1 0