JeremyLiao / LiveEventBus

:mailbox_with_mail:EventBus for Android,消息总线,基于LiveData,具有生命周期感知能力,支持Sticky,支持AndroidX,支持跨进程,支持跨APP
Apache License 2.0
3.87k stars 529 forks source link

事件被内部吞掉,导致不回调问题 #160

Open liujingxing opened 1 year ago

liujingxing commented 1 year ago

在内部LiveData有值的情况下,Activity#onCreate方法里订阅事件,并立即发送事件,此时将收不到任何回调,代码如何:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LiveEventBus.get("test").post("value1"); //保证内部LiveData有值

        LiveEventBus.<String>get("test").observe(this, new Observer<String>() {
            @Override
            public void onChanged(String value) {
                Log.e("LJX", "value=" + value);
            }
        });
        LiveEventBus.get("test").post("value2");
    }
}

此时将收不到任何回调,查看源码后发现,是被ObserverWrapper#preventNextEvent拦截了,该字段本意应该是拦截粘性事件,但在这种情况下,却会拦截订阅后的事件