当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,例如:当某一条件发生时,应用中有几个部件对这个消息感兴趣,那么我们通常采用的就是观察者模式,使用观察者模式有一个弊病就是部件之间的耦合度太高,在这里我将会详细介绍Android中的解耦组建EventBus的使用。


EvnetBus的下载地址:https://github.com/greenrobot/EventBus.git


一、使用EventBus的步骤:


1、下载EventBus

2、让自己的项目以来EventBus

3、自定义一个事件(不需要继承任何类),通常我比较喜欢定义一个Message类

4、定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:

a、onEvent 它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行

b、onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI

c、onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么回调函数就在这个子线程执行。

d、onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。


[java] view plain copy print ?
  1. publicclassMainActivityextendsActivity{
  2. privateImageViewimg1;
  3. privateImageViewimg2;
  4. @Override
  5. protectedvoidonCreate(BundlesavedInstanceState){
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. //img1=(ImageView)this.findViewById(R.id.img1);
  9. //img2=(ImageView)this.findViewById(R.id.img2);
  10. Log.v("EventBus1",Thread.currentThread().getId()+"+++");
  11. //注册
  12. EventBus.getDefault().register(this);
  13. EventBus.getDefault().register(newMyClass());
  14. }
  15. @Override
  16. publicbooleanonCreateOptionsMenu(Menumenu){
  17. //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
  18. getMenuInflater().inflate(R.menu.main,menu);
  19. returntrue;
  20. }
  21. //分发
  22. publicvoidpostEvent(Viewview)
  23. {
  24. EventBus.getDefault().post(newChangeImgEvent(1));
  25. }
  26. @Override
  27. protectedvoidonStop(){
  28. //TODOAuto-generatedmethodstub
  29. super.onStop();
  30. EventBus.getDefault().unregister(this);
  31. }
  32. publicvoidonEventAsync(ChangeImgEventevent)
  33. {
  34. Log.v("EventBus1",Thread.currentThread().getId()+"----");
  35. if(event.getType()==1)
  36. {
  37. System.out.println("-------------+++++++++++");
  38. try{
  39. Thread.sleep(10000);
  40. }catch(InterruptedExceptione){
  41. //TODOAuto-generatedcatchblock
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. }

具体使用如上,代码比较简单,就不做介绍了,我已经上传详细代码

下载地址:http://download.csdn.net/detail/yuanzeyao2008/6675583

更多相关文章

  1. Android---多线程的处理
  2. Android JNI开发详解(7)-线程操作,异常处理
  3. Android线程与进程(二)线程详解
  4. AsyncTask,IntentService工作原理分析&Android线程池
  5. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互
  6. Android中用AsyncTask简单实现多线程
  7. Android 线程池框架、Executor、ThreadPoolExecutor详解

随机推荐

  1. [Android]直接使用代码建立Android视图元
  2. Ubuntu下android学习——(1)开发环境的搭建
  3. Android读写XML(中)——SAX
  4. 瘸腿蛤蟆笔记cocos2d-x-3.2移植到到andro
  5. iPhone和Android,谁将成为赢家?
  6. Android之常见安全问题
  7. 初涉Android蓝牙开发(转) 收藏以备后用
  8. Android触屏事件和MotionEvent介绍
  9. 记录一下八款开源 Android(安卓)游戏引擎
  10. Android(安卓)小小白入门学习详解(不喝脉