有关EventBus的一些问答
来源:互联网 发布:python 提醒 编辑:程序博客网 时间:2024/05/02 02:14
以下结论基于EventBus2.4.0
1.问: 注册EventBus后,EventBus怎么保存我们的注册信息,这里的注册信息包括我们是在哪个Activity或Fragment中注册的,注册的事件,以及接收事件时处理的方法?
答:EventBus通过反射找到我们的事件类型和接收事件处理的方法,以及处理事件时的线程模式,封装到一个叫SubscriberMethod的类中,然后把SubscriberMethod和当前注册的Activity或Fragment又封装到一个叫Subscription的类中,最后以事件类型为key,以CopyOnWriteArrayList<Subscription>
为value放到一个HashMap中。
2.问:EventBus发送事件后,如何找到我们注册的类,和处理的方法?
答:EventBus发送事件后,会以我们发送的事件类型为key到一个HashMap中,找到相应的value-》CopyOnWriteArrayList<Subscription>
然后遍历该CopyOnWriteArrayList,拿到每一个Subscription,通过Subscription拿到注册的Activity或Frament,以及SubscriberMethod,再通过SubscriberMethod拿到处理的方法,最后执行。
3.问:为什么要在Activity或Frament的销毁方法中,注销EventBus?
答:通过上面的两个问答,大家应该知道,EventBus把我们注册的每一个Activity或Fragment保存到了HashMap中,当我们销毁了Activity和Fragment后,EventBus还是可以通过HashMap找到我们注册的类,从而还会执行相应的事件处理方法,这会浪费我们的内存和影响到我们app的性能,所以,不用的时候,要及时注销EventBus。
4.问:EventBus的四种注册方法有什么区别?
答:
EventBus的四种注册方法分别为
1. register(Object subscriber)
2. register(Object subscriber, int priority)
3. registerSticky(Object subscriber)
4. registerSticky(Object subscriber, int priority)
其实EventBus总共有五种注册方法,还有一种是
register(Object subscriber, boolean sticky, int priority)
只不过这个是private修饰的,所以我们不能直接调用。当我们调用上面四种方法时,最后都调用了第五种方法。
所以归根结底,四种方法的区别就是priority和sticky的区别,
至于sticky的值在整个注册过程中没有什么区别。
- 有关EventBus的一些问答
- 有关网游编程的一些问答
- 有关Alpha机器的问答
- EventBus的一些使用,,
- BW的一些问答
- 有关RS232和RS485接口的问答
- 有关RS232和RS485接口的问答
- 有关RS232和RS485接口的问答
- 有关RS232和RS485接口的问答
- 【zt】有关博物馆拍摄的问答
- 蛋白质合成有关的分子生物学知识问答
- 有关RS232和RS485接口的问答
- 袁岳:有关创业的25个问答
- 有关RS232和RS485接口的问答
- 有关软件测试的问答(转)
- 关于jsplet的一些问答
- 关于citrix的一些问答
- 一些问答系统的资料
- 进程编程中的system函数
- mysql数据库的备份策略
- 数据库优化
- http传输json进行服务端接口与客户端对接,以及restful实现
- 16 - 12 - 09 拓扑排序 (C++)
- 有关EventBus的一些问答
- Lintcode 链表划分
- 222 laravel 服务容器,ServiceProvider,Facade的关系
- 孩子是人生最重要的作品之一,作为一个母亲的想法
- Go语言实现的命令行解析程序
- Python pandas 实现图论算法 使用堆加速prim算法 dijkstra floyd
- 基于TI-RTOS的CC2650DK开发(2)---点亮LED
- wince6.0开发平台搭建
- Java接口———工厂方法设计模式