Android 未删除领域观察者

Android 未删除领域观察者,android,realm,realm-mobile-platform,Android,Realm,Realm Mobile Platform,我正在使用这样一个小的助手类 class RealmWatcher<T>(private val query: RealmResults<T>, private val handler: (RealmResults<T>) -> Unit, private val logger: Logger? = null) { private val handlerWr

我正在使用这样一个小的助手类

class RealmWatcher<T>(private val query: RealmResults<T>,
                      private val handler: (RealmResults<T>) -> Unit,
                      private val logger: Logger? = null) {

    private val handlerWrapper: (RealmResults<T>) -> Unit = { result ->
        logger?.trace("⟳  '$result")
        handler.invoke(query)
    }

    fun start() {
        stop()
        handler.invoke(query)
        query.addChangeListener(handlerWrapper) 
    }

    fun stop() {
        query.removeChangeListener(handlerWrapper)
    }
}
这就导致我假设领域内存在一个bug。因为创建了一个新的RealmChangeListenerWrapper,并且

    public boolean equals(Object obj) {
        return obj instanceof RealmChangeListenerWrapper &&
                listener == ((RealmChangeListenerWrapper) obj).listener;
    }
失败,因为它是另一个侦听器,因此不会被删除

我是做错了什么还是这是一个领域错误

addListener和RemovelListener都创建了一个RealmChangeListenerWrapper,所以这绝对是正确的

它验证侦听器是否与另一个侦听器是同一个实例,因此,如果要删除先前注册的同一个侦听器,那么这也应该有效

假设你打电话

realmWatcher.start()
// change listener should be added
realmWatcher.stop()
// change listener should be removed
然后应该从RealmResults中正确地删除观察器,因为handlerWrapper两次都是同一个实例

如果这种情况没有发生,我将非常感谢一个复制这种情况的github示例项目

public boolean equals(Object obj) {
    return obj instanceof RealmChangeListenerWrapper &&
            listener == ((RealmChangeListenerWrapper) obj).listener;
}
realmWatcher.start()
// change listener should be added
realmWatcher.stop()
// change listener should be removed