EventBus理解
来源:互联网 发布:魔兽争霸mac无法打开 编辑:程序博客网 时间:2024/06/14 03:49
一、使用
1.注册
EventBus.getDefault().register(this); //this指代订阅者2.订阅者定义接收方法
public void onEventMainThread(Object event) { //button.setText(event); event>的类型自己定义}3.0版本改动:通过注解来指定接收方法
@Subscribe(threadMode = ThreadMode.MainThread)public void <自己定义>(Object event) { //button.setText(event);}3.发送数据
EventBus.getDefault().post(result);
二、源码理解
1.注册
register()方法中调用SubscriberMethodFinder.java类的findSubscriberMethods集合,用于获取订阅者类中所包含的接收方法(onEventMainThread/..)
register
private synchronized void register(Object subscriber, boolean sticky, int priority) { // 找到注册者中所有的接收方法(onEventMainThread/....) List<SubscriberMethod> subscriberMethods = subscriberMethodFinder.findSubscriberMethods(subscriber.getClass()); for (SubscriberMethod subscriberMethod : subscriberMethods) { subscribe(subscriber, subscriberMethod, sticky, priority); }}findSubscriberMethod
for (Method method : methods) { String methodName = method.getName(); if (methodName.startsWith(ON_EVENT_METHOD_NAME)) { int modifiers = method.getModifiers(); // 获取方法的修饰 ,订阅者只能是public的,并且不能被final,static等修饰 if ((modifiers & Modifier.PUBLIC) != 0 && (modifiers & MODIFIERS_IGNORE) == 0) { Class<?>[] parameterTypes = method.getParameterTypes(); if (parameterTypes.length == 1) { // 参数类型有且只能有一个(采用bean) String modifierString = methodName.substring(ON_EVENT_METHOD_NAME.length()); ThreadMode threadMode; if (modifierString.length() == 0) { threadMode = ThreadMode.PostThread; } else if (modifierString.equals("MainThread")) { threadMode = ThreadMode.MainThread; } else if (modifierString.equals("BackgroundThread")) { threadMode = ThreadMode.BackgroundThread; } else if (modifierString.equals("Async")) { threadMode = ThreadMode.Async; }
subcribe方法将获得的数据(方法名,参数类型,subscriber)封装到subscriptionsByEventType集合中
2.接收
通过post(event)方法将参数even传递
从内存中读取接收的方法名和even数据,通过反射机制执行该方法
通过反射机制执行所要接收的方法(即onEventMainThread)
0 0
- EventBus理解
- EventBus理解
- EventBus理解
- EventBus理解
- EventBus源码的理解
- EventBus基本理解
- EventBus的简单理解
- EventBus---EventBus源码解析 带你深入理解EventBus
- EventBus---EventBus源码解析 带你深入理解EventBus
- 深入理解EventBus - 基本使用
- EventBus的理解和使用
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- Android EventBus源码解析 带你深入理解EventBus
- 二叉树的循环遍历方法,Java实现。利用栈和arraylist
- JavaWeb之Servlet
- json的定义
- 什么是数据库事务?
- Reverse Bits
- EventBus理解
- ServletContainerInitializer初始化器
- 基于Phaser框架完成FlappyBird
- 连接数据库
- abs() 函数
- 单例模式
- Hdu 5749 Colmerauer
- POJ3250——Bad Hair Day(栈的应用)
- 373. Find K Pairs with Smallest Sums