该字段泄漏上下文对象

xor*_*gx3 21 android kotlin

我的代码:

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

为什么使用TextView显示警告:

该字段泄漏上下文对象

我怎么能阻止这个?

Sub*_*sed 20

使用WeakReference.

val textRef: WeakReference<TextView> = WeakReference(debtorText)
Run Code Online (Sandbox Code Playgroud)

  • 几年前,我觉得 WeakReference 可能是一个灵丹妙药。但现在我觉得我错了。它只会给你带来更多的麻烦而不是方便。 (2认同)

Ema*_*l S 13

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

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

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

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

  • 我应该如何在没有此问题的情况下发送 View 或 Context 对象? (2认同)