Open edwardZj opened 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);主动关闭上面的监听
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);主动关闭上面的监听