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:
committed by
Facebook GitHub Bot
parent
2051359490
commit
1744335ddd
@@ -12,6 +12,7 @@ import android.view.View
|
|||||||
import android.view.ViewTreeObserver
|
import android.view.ViewTreeObserver
|
||||||
import com.facebook.flipper.plugins.uidebugger.LogTag
|
import com.facebook.flipper.plugins.uidebugger.LogTag
|
||||||
import com.facebook.flipper.plugins.uidebugger.core.Context
|
import com.facebook.flipper.plugins.uidebugger.core.Context
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
typealias DecorView = View
|
typealias DecorView = View
|
||||||
|
|
||||||
@@ -20,19 +21,20 @@ class DecorViewObserver(val context: Context) : TreeObserver<DecorView>() {
|
|||||||
|
|
||||||
val throttleTimeMs = 500
|
val throttleTimeMs = 500
|
||||||
|
|
||||||
// should this be a weak reference?
|
private var nodeRef: WeakReference<View>? = null
|
||||||
private var nodeRef: View? = null
|
|
||||||
private var listener: ViewTreeObserver.OnPreDrawListener? = null
|
private var listener: ViewTreeObserver.OnPreDrawListener? = null
|
||||||
|
|
||||||
override val type = "DecorView"
|
override val type = "DecorView"
|
||||||
|
|
||||||
override fun subscribe(node: Any) {
|
override fun subscribe(node: Any) {
|
||||||
|
|
||||||
node as View
|
node as View
|
||||||
nodeRef = node
|
nodeRef = WeakReference(node)
|
||||||
|
|
||||||
Log.i(LogTag, "Subscribing to decor view changes")
|
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 =
|
listener =
|
||||||
object : ViewTreeObserver.OnPreDrawListener {
|
object : ViewTreeObserver.OnPreDrawListener {
|
||||||
var lastSend = 0L
|
var lastSend = 0L
|
||||||
@@ -53,7 +55,7 @@ class DecorViewObserver(val context: Context) : TreeObserver<DecorView>() {
|
|||||||
Log.i(LogTag, "Unsubscribing from decor view changes")
|
Log.i(LogTag, "Unsubscribing from decor view changes")
|
||||||
|
|
||||||
listener.let {
|
listener.let {
|
||||||
nodeRef?.viewTreeObserver?.removeOnPreDrawListener(it)
|
nodeRef?.get()?.viewTreeObserver?.removeOnPreDrawListener(it)
|
||||||
listener = null
|
listener = null
|
||||||
nodeRef = null
|
nodeRef = null
|
||||||
}
|
}
|
||||||
@@ -66,7 +68,7 @@ object DecorViewTreeObserverBuilder : TreeObserverBuilder<DecorView> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun build(context: Context): TreeObserver<DecorView> {
|
override fun build(context: Context): TreeObserver<DecorView> {
|
||||||
Log.i(LogTag, "Building decor view observer")
|
Log.i(LogTag, "Building DecorView observer")
|
||||||
return DecorViewObserver(context)
|
return DecorViewObserver(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user