EventBus 的用法
2016-06-27 10:57
363 查看
前言
Demo 地址关于 EventBus 笔者将分两篇文章进行介绍。
EventBus 的用法
EventBus 的源码分析
什么是 EventBus 及优点
简化组件之间的通信减弱事件发送者和接受者之间的耦合
使 Activity 、Fragment 和后台线程很好的进行消息传递
避免和生命周期之间复杂和易错的依赖关系。
使代码更加简洁
效率更高
轻量级(jar 包小于 50K) 等等
EventBus 的用法
引入 EventBus
首先去这里先下载 EventBus,然后导入你的项目里新建一个类 MyEvent
public class MyEvent { int id; String msg; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
注册 EventBus
在需要接受消息的页面调用如下方法注册 EventBus,可以在 Activity 或者 Fragment 的 onCreate 方法里调用。在 onDestroy 方法中解注册。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this);//注册 EventBus } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
发送消息
在需要发送消息的地方使用 EventBus 的 post 方法发送消息,这里的消息就是新建的类 MyEvent 的对象。public void onClick(View view) { MyEvent myEvent = new MyEvent(); myEvent.setId(1); myEvent.setMsg("This is from SecondActivity"); EventBus.getDefault().post(myEvent); }
接受消息
在需要接受消息的页面写一个方法 onEvent ,并使用 Subscribe 注解标记此方法是 EventBus 接受消息的方法@Subscribe(threadMode = ThreadMode.MAIN) //标注此方法是 EventBus 接受消息的方法 public void onEvent(MyEvent myEvent){ Log.i(Tag,"MainActivity"+myEvent.getId()+"==="+myEvent.getMsg()+"==Thread="+Thread.currentThread()); }
Subscribe 注解有一个枚举类型的属性 threadMode ,它有四个值,默认值是 ThreadMode.POSTING。
ThreadMode.POSTING — 消息是从哪个线程里发送来的,接受消息的方法将会在和发送消息相同的线程里执行
ThreadMode.MAIN — 无论消息是否是从 mian 线程里发送来的,接受消息的方法都在 main 线程中执行
ThreadMode.BACKGROUND — 如果消息是从 main 线程中发送来的,将启动一个新的线程执行接受消息的方法,如果不是从 main 线程发送来的,接受消息的方法将在和发送消息相同的线程里执行
ThreadMode.ASYNC — 无论消息是从哪个线程里发送来的,都将启动新的子线程执行接受消息的方法。
结语
至此,EventBus 的用法已经介绍完,下篇将从源码分析 EventBus。相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories