该字段泄漏上下文对象

时间:2017-10-17 19:38:37

标签: android kotlin

我的代码:

class HttpRequestTask(private val debtWsUrl : URI, debtorText : TextView) : 
      AsyncTask<Void, Void, Iterable<Debtor>?>() {
            val debtorText: TextView = debtorText
}

为什么使用TextView的行显示警告:

  

此字段泄漏上下文对象

我该怎样防止这种情况?

2 个答案:

答案 0 :(得分:14)

使用WeakReference

val textRef: WeakReference<TextView> = WeakReference(debtorText)

答案 1 :(得分:13)

您将视图分配给HttpRequestTask。由于视图需要上下文,因此您正在泄露它。

想想如果View被破坏但Http任务尚未完成会发生什么。

这就是为什么你应该避免在方法中分配Context相关的东西,这些东西可能会在视图被杀死时返回一些东西。

删除debtorText并返回值以在视图中设置它。