android - EventBus 在基类注册 和 取消注册
迷茫
迷茫 2017-04-18 09:04:07
[Android讨论组]

在BaseActivity的生命onCreate 和 onDestory生命周期方法中调用EventBus的注册和取消注册方法;

子类中没有写任何订阅的方法,报错:

Caused by: org.greenrobot.eventbus.EventBusException: Subscriber class **.views.MainActivity and its super classes have no public methods with the @Subscribe annotation;

请问大神,这个怎么处理?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
PHP中文网

题主的问题应该是在BaseActivity注册订阅之后, GreenRobot.EventBus 未找到任何 @Subscribe注解的公有(public)回调函数. EventBus消息订阅根本没有必要写到BaseActivity 或者BaseFragment中, 按需调用就好了.

另外, 值得说明的是:

几乎所有的EventBus框架(EventBus, otto, RxBus), 都不建议你在父类中去注册订阅, 都只能在没有子类的类中注册, 如果你非要在BaseActivity中使用, 那么在BaseActivity定义个没有子类的内部类.

上述内容是可以在各EventBus框架的wiki文档中找到对应的警告的.

示例如下:

public class BaseActivity extend Activity {
    private class EventBusReceiver {
        @Subscribe
        public void onEvnet1(Event1 event) {
            // TODO to do what?
        }
    }
    
    private EventBusReceiver mEventBusReceiver = new EventBusReceiver();
    
    @Override
    public void onResume() {
        // register event bus
    }
    
    @Override
    public void onPause() {
        // unregister event bus
    }
}

最后强烈建议使用 AndroidKnife/RxBus, 如果你已经使用了Rx的话.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号