【问题标题】:This field leaks a context object此字段泄漏上下文对象
【发布时间】:2017-10-17 19:38:36
【问题描述】:

我的代码:

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

为什么与TextView行显示警告:

这个字段泄露了一个上下文对象

?

如何防止这种情况发生?

【问题讨论】:

  • 看看这个Answer 解决了我的问题。

标签: android kotlin


【解决方案1】:

使用WeakReference

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

【讨论】:

  • 几年前,我觉得 WeakReference 可能是灵丹妙药。但现在我觉得我错了。它只会给你带来更多的麻烦而不是方便。
  • 谢谢!它使用上下文作为对象对我有用
【解决方案2】:

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

试想一下如果 View 已经被销毁但 Http Task 还没有完成会发生什么。

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

删除debtorText并返回值以将其设置在您的视图中。

【讨论】:

  • 我应该如何发送 View 或 Context 对象而不出现此问题?
猜你喜欢
  • 1970-01-01
  • 2021-05-18
  • 2018-10-17
  • 2015-04-29
  • 2021-06-20
  • 2018-04-02
  • 1970-01-01
  • 2019-05-07
  • 2014-12-10
相关资源
最近更新 更多