(4.2.1)【android开源工具】Android中开源库EventBus使用详解
当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 ?
- publicclassMainActivityextendsActivity{
- privateImageViewimg1;
- privateImageViewimg2;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- 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(newMyClass());
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- //分发
- publicvoidpostEvent(Viewview)
- {
- EventBus.getDefault().post(newChangeImgEvent(1));
- }
- @Override
- protectedvoidonStop(){
- //TODOAuto-generatedmethodstub
- super.onStop();
- EventBus.getDefault().unregister(this);
- }
- publicvoidonEventAsync(ChangeImgEventevent)
- {
- Log.v("EventBus1",Thread.currentThread().getId()+"----");
- if(event.getType()==1)
- {
- System.out.println("-------------+++++++++++");
- try{
- Thread.sleep(10000);
- }catch(InterruptedExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- }
- }
具体使用如上,代码比较简单,就不做介绍了,我已经上传详细代码
下载地址:http://download.csdn.net/detail/yuanzeyao2008/6675583
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python技巧匿名函数、回调函数和高阶函数
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 浅析android通过jni控制service服务程序的简易流程
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)Resource介绍和使用
- "Failed to fetch URL https://dl-ssl.google.com/android/repos