[英]Realm observer not removed
我正在使用像這樣的小助手類
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)
}
}
在onResume
和onPause中的片段中start
和stop
偵聽器
現在,我看到那些觀察者已被正確刪除。 我已經深入Realm,並在OsResults
看到了這些行
public <T> void removeListener(T observer, RealmChangeListener<T> listener) {
removeListener(observer, new RealmChangeListenerWrapper<T>(listener));
}
這使我想到領域內部存在錯誤。 因為創建了一個新的RealmChangeListenerWrapper
包裝器,並且
public boolean equals(Object obj) {
return obj instanceof RealmChangeListenerWrapper &&
listener == ((RealmChangeListenerWrapper) obj).listener;
}
失敗,因為它的監聽器不同,因此不會被刪除。
我是在做錯什么還是這是一個領域錯誤?
public boolean equals(Object obj) {
return obj instanceof RealmChangeListenerWrapper &&
listener == ((RealmChangeListenerWrapper) obj).listener;
}
addListener
和removeListener
創建一個RealmChangeListenerWrapper
,因此絕對是正確的。
它驗證listener
是相同的實例與其他listener
,所以應該工作太多,如果您刪除您以前注冊了相同的監聽器。
所以假設你打電話
realmWatcher.start()
// change listener should be added
realmWatcher.stop()
// change listener should be removed
然后,應該從RealmResults中正確刪除觀察者,因為handlerWrapper
都是同一實例。
如果那沒有發生,我將感謝一個示例github項目,它再現了這一點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.