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