用过EventBus的人都会觉得EventBus很好用,但是EventBus有一个让人很难受的地方—-在你post之后,可能会有几处接收到你post的对象,但是作为开发者,时间长了之后,并不知道在哪几处接收到了订阅的消息。特别是在项目大了之后,到处都在post,但是却不知道哪里接收到了。
所以我简单修改了一下它的源码,让它能支持debug模式。
首先去下载源码
EventBus.java
在EventBus.java中增加isDebug标志位,在Application或MainActivity中初始化。
private boolean isDebug = false;
public boolean isDebug() {
return isDebug;
}
public void setIsDebug(boolean isDebug) {
this.isDebug = isDebug;
}
重载post方法,从代码中可以看出来,from是直接用from.getClass().getSimpleName()得到文件名,所以在OnClickListener等接口中需要注意,传入MainActivity.this,或Fragment.this
public void post(Object from, Object event) {
if (isDebug) {
Log.d(TAG, event.getClass().getSimpleName() + " is posted by " + from.getClass().getSimpleName());
}
post(event);
}
在invokeSubscriber中增加订阅者受到消息提醒
public void invokeSubscriber(Subscription subscription, Object event) {
try {
if (isDebug) {
Log.d(TAG, event.getClass().getSimpleName() + " is received by " + subscription.subscriber.getClass().getSimpleName());
}
subscription.subscriberMethod.method.invoke(subscription.subscriber, event);
} catch (InvocationTargetException e) {
handleSubscriberException(subscription, event, e.getCause());
} catch (IllegalAccessException e) {
throw new IllegalStateException("Unexpected exception", e);
}
}
现在post一个值为”abc”的String,效果如下
打包成Jar文件
因为打包花了我很长时间,但是实际上除了下载gradle之外花的时间并不长,在这里稍做记录。
首先新建一个你需要打包的lib文件lib module.
在这个module中,删除src中不必要的文件,在build.gradle中(module中的gradle文件,不是项目的gradle文件),末尾增加
task makeJar(type: Copy) {
delete 'build/libs/eventbus.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'eventbus.jar')
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar
然后在左下角的terminal执行gradlew makeJar
然后没下载gradle的它会下载gradle。(如果已经下载就不用看这一段了)我是gradle-2.8-all.zip,下载的特别慢,所以一直在”……………………”。
这里有个快速下载的办法,在项目的gradle文件中,找到wrapper下的gradle-wrapper.properties,里面有distributionUrl。我的是https://services.gradle.org/distributions/gradle-2.8-all.zip。
然后用迅雷或者其他下载工具下载。下载好了之后,去下载一个hfs本地网络服务器,拖进去得到下载地址,然后修改distributionUrl中的地址,变成了http://192.168.0.137/gradle-2.8-all.zip。
然后重新执行gradlew makeJar,它会瞬间下载文成,接着下载一些配置文件,这里也要花一点时间,这个是没办法,只能慢慢等,然后等待BUILD SUCCESSFUL。
成功后,在lib module中的build下的libs会生成一个jar文件。也就是项目的jar文件。