Android 事件总线Otto使用入门一
来源:互联网 发布:学java看什么书 编辑:程序博客网 时间:2024/04/30 14:15
Otto是android 事件总线 EventBus模式的一个框架
在Module的build.gradle中添加如下语句:
// Event bus.compile 'com.squareup:otto:1.3.5'我们可以写一个App类继承Application使得Bus实例在程序运行初始就得到初始化,也可以单独写一个BusProvider的类在需要的时候直接使用其中已经初始化的Bus对象。在这里我使用App类:
public class App extends Application { public static Bus bus; @Override public void onCreate() { super.onCreate(); // Bus must be created before we do anything else as other components want to post on it. bus = new Bus(ThreadEnforcer.ANY); }}然后我们可以在MainActivity的onResume方法中注册并在onPause方法中取消注册(注销)语句如下:
@Overrideprotected void onResume() { super.onResume(); App.bus.register(this);}@Overrideprotected void onPause() { super.onPause(); App.bus.unregister(this);}然后到了最关键的地方,也就是这个框架的核心功能。我们需要产生一个事件,一个或多个订阅者,还需要一个发布函数(post方法可以直接使用):
首先我们写一个事件类并在MainActivity中写一个产生事件的函数并且通过点击按钮的事件发布出去(如果你直接将post事件写在MainActivity的onCreate方法中,那么你不可能将事件发布出去,尽管不会报错,因为onCreate()方法在onResume()方法之前):
public class NewEvent { public String message; public NewEvent(String message) { this.message = message; }}
public NewEvent produceNewEvent() { return new NewEvent("this is changed String");}
App.bus.post(produceNewEvent());
我为什么没有在produceNewEvent方法上加@produce注解呢?因为加上之后即使不点击按钮事件也会在程序运行时自己发布出去。
为了方便起见我们就不再新建一个类,而直接把订阅者写在MainActivity中(因为其原理是找寻具有@Subscribe注解的函数去执行,和类本身没有关系)://订阅者A@Subscribepublic void onEventA(NewEvent newEvent) { Log.i(TAG, "This is 订阅者A");}//订阅者B@Subscribepublic void onEventB(NewEvent newEvent) { Log.i(TAG, "This is 订阅者B");}
我们写两个订阅事件是为了说明订阅者之间接收消息是没有先后顺序的。(但是我测试的结果总是订阅者A先响应)
一开始我居然忘记加上@Subscribe注解,真是的。
最后调试结果如下:
06-30 10:27:08.810 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:08.810 8454-8454/com.myapplication I/MainActivity: This is 订阅者B
06-30 10:27:11.372 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:11.372 8454-8454/com.myapplication I/MainActivity: This is 订阅者B
06-30 10:27:13.007 8454-8454/com.myapplication I/MainActivity: This is 订阅者A
06-30 10:27:13.007 8454-8454/com.myapplication I/MainActivity: This is 订阅者B
后面我还要再深入学习一下这个Otto框架,请看另一篇博客,哦不好意思,我还没写呢。
要不,我给您唱首歌:http://changba.com/s/AdwbB4FU-ZW6n7vEyIWZbQ?&code=Kxhsv6044ik&from=pcrecommend
见笑了
- Android 事件总线Otto使用入门一
- Android 事件总线OTTO入门
- android 事件总线 -- Otto(一)
- android事件总线 otto使用
- Android 事件总线OTTO用法快速入门
- Android 事件总线OTTO用法快速入门
- Android 事件总线OTTO用法快速入门
- Android 事件总线OTTO用法快速入门
- Android 事件总线OTTO用法快速入门
- Android 事件总线OTTO用法快速入门
- Android 事件总线 Otto
- Android事件总线框架Otto使用
- Android事件总线 Otto框架使用
- Android事件总线OTTO用法的快速入门
- Otto事件总线框架的使用(一)
- Android otto 事件总线的使用(使用场景)
- android中Otto事件总线框架的使用
- android 事件总线 -- Otto(二) Produce、Subscribe
- java Unsafe类的compareAndSwap方法
- RSA加密与SHA签名用法详解
- 拿到资产目录下的xml文件,并解析xml文件
- HTML 5 <input> type 属性
- 五大常用算法之五:分支限界法
- Android 事件总线Otto使用入门一
- Category 类扩展,就是给原有类的添加方法。
- 文本编辑器中,如何设计 撤销/重复栈
- 一个Spark SQL查询的一生
- eclipse安装maven插件
- ui-router中路由的二级嵌套
- 淡疼的itoa和abs: 'itoa' was not declared in this scope; 'abs' was not declared in this scope
- 推荐系统实践读书笔记一
- 【技巧】windows常用技巧