我的代码:
class HttpRequestTask(private val debtWsUrl : URI, debtorText : TextView) : AsyncTask<Void, Void, Iterable<Debtor>?>() { val debtorText: TextView = debtorText }
为什么带有TextView的行显示警告:此字段泄漏上下文对象?我该如何预防这种情况?
m1m5dgzv1#
使用WeakReference。
val textRef: WeakReference<TextView> = WeakReference(debtorText)
tez616oj2#
您将视图分配给HttpRequestTask。由于视图需要上下文,因此您正在泄漏它。试想一下,如果视图已经被破坏,但Http任务还没有完成,会发生什么。这就是为什么你应该避免在方法内部给Context赋值,因为这可能会在视图被删除时返回一些东西。删除debtorText并返回值,以便在视图中设置它。
2条答案
按热度按时间m1m5dgzv1#
使用WeakReference。
tez616oj2#
您将视图分配给HttpRequestTask。由于视图需要上下文,因此您正在泄漏它。
试想一下,如果视图已经被破坏,但Http任务还没有完成,会发生什么。
这就是为什么你应该避免在方法内部给Context赋值,因为这可能会在视图被删除时返回一些东西。
删除debtorText并返回值,以便在视图中设置它。