View as weak reference

Summary: Keep a weak reference of the view instead of a strong reference.

Reviewed By: LukeDefeo

Differential Revision: D39575312

fbshipit-source-id: ae8df7d089b29ea3b1cf960a6ae020ed5a9c3648
This commit is contained in:
Lorenzo Blasa
2022-09-20 05:15:50 -07:00
committed by Facebook GitHub Bot
parent 2051359490
commit 1744335ddd

View File

@@ -12,6 +12,7 @@ import android.view.View
import android.view.ViewTreeObserver
import com.facebook.flipper.plugins.uidebugger.LogTag
import com.facebook.flipper.plugins.uidebugger.core.Context
import java.lang.ref.WeakReference
typealias DecorView = View
@@ -20,19 +21,20 @@ class DecorViewObserver(val context: Context) : TreeObserver<DecorView>() {
val throttleTimeMs = 500
// should this be a weak reference?
private var nodeRef: View? = null
private var nodeRef: WeakReference<View>? = null
private var listener: ViewTreeObserver.OnPreDrawListener? = null
override val type = "DecorView"
override fun subscribe(node: Any) {
node as View
nodeRef = node
nodeRef = WeakReference(node)
Log.i(LogTag, "Subscribing to decor view changes")
// TODO: there's a problem with this. Some future changes may have been
// ignored and not sent. Need to keep track of the last one, always and react
// accordingly.
listener =
object : ViewTreeObserver.OnPreDrawListener {
var lastSend = 0L
@@ -53,7 +55,7 @@ class DecorViewObserver(val context: Context) : TreeObserver<DecorView>() {
Log.i(LogTag, "Unsubscribing from decor view changes")
listener.let {
nodeRef?.viewTreeObserver?.removeOnPreDrawListener(it)
nodeRef?.get()?.viewTreeObserver?.removeOnPreDrawListener(it)
listener = null
nodeRef = null
}
@@ -66,7 +68,7 @@ object DecorViewTreeObserverBuilder : TreeObserverBuilder<DecorView> {
}
override fun build(context: Context): TreeObserver<DecorView> {
Log.i(LogTag, "Building decor view observer")
Log.i(LogTag, "Building DecorView observer")
return DecorViewObserver(context)
}
}