在android中用eventBus.2.4.jar中出现的问题

来源:互联网 发布:java中getField 编辑:程序博客网 时间:2024/05/22 03:03

在项目中用到eventBus.2.4.jar包中混淆出现一下问题,程序在测试环境下可以正常运行

com.ypy.eventbus.EventBusException: Subscriber class com.quickdate.quickappointmentgame.android.fragment.SearchFragment has no public methods called onEvent
 at vk.a(Unknown Source)
 at va.a(Unknown Source)
 at va.a(Unknown Source)
 at com.quickdate.quickappointmentgame.android.fragment.SearchFragment.onCreate(Unknown Source)
 at android.support.v4.app.Fragment.performCreate(Unknown Source)
 at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
 at android.support.v4.app.FragmentManagerImpl.moveToState(Unknown Source)
 at android.support.v4.app.BackStackRecord.run(Unknown Source)
 at android.support.v4.app.FragmentManagerImpl.execPendingActions(Unknown Source)
 at android.support.v4.app.FragmentManagerImpl$1.run(Unknown Source)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)
 at android.os.Looper.loop(Looper.java:148)
 at android.app.ActivityThread.main(ActivityThread.java:5432)
 at java.lang.reflect.Method.invoke(Native Method)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:735)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
最终的解决办法是:

首先EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦;

在eventBus中会有四种方法

1、onEvent: 那个线程发出,在那个线程执行
2、onEventMainThread:为订阅函数,不论事件在那个线程中发布出来的,他都会在UI线程中执行,接收事件就会在ui线程中运行。所以此方法中不能执行耗时操作的。
3、onEventBackgroundThread:在子线程中执行
4、onEventAsync: 作为订阅函数,无论在哪个线程发布,都会创建新的子线程在执行eventAsync

eventBus.getDefault().register(this);

此this指的是注册入口之后进入onevent()方法,即时在项目中没重写其他的三个方法,它也会执行到,

所以在做混淆处理的时候要把 单独的onevent()等四个方法要拿出来keep掉

在混线文件中添加proguard-project.txt文件中添加

-keep public class com.jzrh.easyappointment.android.fragment.SearchFargment{
    public void onEvent*(**);
    public void onEventMainThread*(**);
    public void onEventBackgroundThread*(**);
    public void onEventAsync*(**);
}

 

 

0 1
原创粉丝点击