android.database.ContentObserver#onChange(boolean, android.net.Uri)
在调用数据库监听的方法的时候发现,该方法会被屡次触发。好比,只是增长或者删除了一条数据,可是实际上,不管是增长仍是删除,每次该方法都会被回调两次。java
对于既定的事实,尚不清楚此设计的初衷。不过,咱们并不想作重复的逻辑。解决方案是:?python
- 在收到回调以后,当即反注册,防止重复接收相同回调
if (activity != null) { resolver = activity.getContentResolver(); calendarObserver = new ContentObserver(mMainHandler) { // @Override // public void onChange(boolean selfChange) { // super.onChange(selfChange); // LogUtils.d(selfChange); // } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); LogUtils.i(selfChange + " ,,, " + uri); // onChange 每次都会被回调两次,甚至屡次。 // 每次增删以前注册,收到当即反注册便可 resolver.unregisterContentObserver(calendarObserver); refreshUI(); } }; }
- 在删除/增长 操做的时候,先注册监听。
CalendarVM.deleteByCustom(getContext(), info) .doOnSubscribe(t -> resolver .registerContentObserver(Events.CONTENT_URI, false, calendarObserver)) .subscribe(rows -> { LogUtils.d("after delete: " + rows); if (rows > 0) { ToastHelper.show(Objects.requireNonNull(getContext()), "delete success.." + rows); } }, Throwable::printStackTrace)
奇怪的夜晚android