Android中开源库EventBus使用详解
当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,例如:当某一条件发生时,应用中有几个部件对这个消息感兴趣,那么我们通常采用的就是观察者模式,使用观察者模式有一个弊病就是部件之间的耦合度太高,在这里我将会详细介绍Android中的解耦组建EventBus的使用。
一、使用EventBus的步骤:
1、下载EventBus
2、让自己的项目以来EventBus
3、自定义一个事件(不需要继承任何类),通常我比较喜欢定义一个Message类
4、定义回调函数,相当于观察者模式中的on***Listener函数,在EventBus中可以定义四种类型的回调函数:
a、onEvent 它和ThreadModel中的PostThread对应,这个也是默认的类型,当使用这种类型时,回调函数和发起事件的函数会在同一个线程中执行
b、onEventMainThread,当使用这种类型时,回调函数会在主线程中执行,这个在Android中非常有用,因为在Android中禁止在子线程中修改UI
c、onEventBackgroundThread,当使用这种类型时,如果事件发起函数在主线程中执行,那么回调函数另启动一个子线程,如果事件发起函数在子线程执行,那么 回调函数就在这个子线程执行。
d、onEventBusAsync,当使用这种类型时,不管事件发起函数在哪里执行,都会另起一个线程去执行回调。
public class MainActivity extends Activity { private ImageView img1; private ImageView img2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// img1=(ImageView)this.findViewById(R.id.img1);// img2=(ImageView)this.findViewById(R.id.img2); Log.v(EventBus1, Thread.currentThread().getId()++++); //注册 EventBus.getDefault().register(this); EventBus.getDefault().register(new MyClass()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } //分发 public void postEvent(View view) { EventBus.getDefault().post(new ChangeImgEvent(1)); } @Override protected void onStop() { // TODO Auto-generated method stub super.onStop(); EventBus.getDefault().unregister(this); } public void onEventAsync(ChangeImgEvent event) { Log.v(EventBus1, Thread.currentThread().getId()+----); if(event.getType()==1) { System.out.println(-------------+++++++++++); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
具体使用如上,代码比较简单,就不做介绍了,我已经上传详细代码
>更多相关文章
首页推荐
佛山市东联科技有限公司一直秉承“一切以用户价值为依归
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复
相关文章
24小时热门资讯
24小时回复排行
热门推荐
最新资讯
操作系统
黑客防御