Android中开源库EventBus使用详解

浏览:
字体:
发布时间:2013-12-09 23:23:17
来源:

当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();			}					}	}		}

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

 

>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 关于东联 | 安全雇佣 | 搞笑视频大全 | 微信学院 | 视频课程 |
关于我们 | 联系我们 | 广告服务 | 免责申明 | 作品发布 | 网站地图 | 官方微博 | 技术培训
Copyright © 2007 - 2024 Vm888.Com. All Rights Reserved
粤公网安备 44060402001498号 粤ICP备19097316号 请遵循相关法律法规
');})();