JeremyLiao / LiveEventBus

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

关于带生命周期延迟发送 #144

Open edwardZj opened 2 years ago

edwardZj commented 2 years ago

public void postDelay(LifecycleOwner owner, final T value, long delay) { mainHandler.postDelayed(new PostLifeValueTask(value, owner), delay); } 内部实现为: public void run() { if (owner != null) { if (owner.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) { postInternal((T) newValue); } } } 只有在执行的时候执行判断,但是如果期间owner已经销毁,这里保持owner引用容易导致内存泄露,建议加上: if (owner != null) { LifecycleObserver observer = new LifecycleObserver() { @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) public void onDestory() { handler.removeCallbacks(PostLifeValueTask); if (owner != null) { owner.getLifecycle().removeObserver(this); } } }; eventRunnable.observer = observer; owner.getLifecycle().addObserver(observer); }

同时PostLifeValueTask在run之前建议加上 owner.getLifecycle().addObserver(observer);主动关闭上面的监听