V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
dzzchao
V2EX  ›  Android

Eventbus 是否可以创建多个实例?

  •  
  •   dzzchao · Dec 18, 2019 · 15122 views
    This topic created in 2332 days ago, the information mentioned may be changed or developed.

    Eventbus 是否可以创建多个实例?

    如果可以,如何创建?

    还是说,没有创建多个实例的场景,只需要一 EventBus.getDefault() 就可以满足所有需求?

    9 replies    2020-01-02 16:31:34 +08:00
    vanxy
        1
    vanxy  
       Dec 18, 2019   ❤️ 1
    不可以创建多实例;
    没有多个实例的场景;

    源码:实际上 EventBus 就是个单例

    https://github.com/greenrobot/EventBus/blob/master/EventBus/src/org/greenrobot/eventbus/EventBus.java
    gramyang
        2
    gramyang  
       Dec 18, 2019
    没必要创建多个实例吧,eventbus 就是对 handler 的封装使用。
    说场景的话,android 作为前端也没有多复杂的并发场景。
    maninfog
        3
    maninfog  
       Dec 18, 2019 via iPhone
    @vanxy 利用 build()方法不就可以创建多实例了
    maninfog
        4
    maninfog  
       Dec 18, 2019 via iPhone
    @maninfog 不对 构造函数也是 public 的话那就可以随便创建了阿
    liuhuansir
        5
    liuhuansir  
       Dec 18, 2019
    @maninfog 你没看源码吧?
    woodensail
        6
    woodensail  
       Dec 18, 2019
    @liuhuansir 虽然我不做 android,但是一楼给的注释里面构造函数上的注释写着「 Creates a new EventBus instance; each instance is a separate scope in which events are delivered.」

    是可以构造多个的,虽然不推荐。
    crayygy
        7
    crayygy  
       Dec 18, 2019 via iPhone
    可以创建多个实例,只是 default instance 是个单例。
    至于有没有必要,看业务需求,大多数情况下我认为是没有必要的。
    maninfog
        8
    maninfog  
       Dec 18, 2019 via iPhone
    @liuhuansir 1 楼贴的源码明明白白的 pulic constructor 以及可以通过 Builder 的 build 方法生成新的实例 怎么就是成我没看源码了?有点奇怪,1 楼贴了源码还笃定不可以创建新的实例,而且还说源码"Eventbus 就是个单例",那只是别人帮你实现了一个单例而已。有点奇怪…
    gotosky
        9
    gotosky  
       Jan 2, 2020
    当然可以
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3654 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 00:39 · PVG 08:39 · LAX 17:39 · JFK 20:39
    ♥ Do have faith in what you're doing.