【问题标题】:Can this code cause memory leak with kotlin此代码是否会导致 kotlin 内存泄漏
【发布时间】:2020-01-29 11:52:17
【问题描述】:

如果我有其他类的持有上下文的伴随对象,如下所示。

class Sample01Activity: BaseActivity() {

    companion object {
        fun open(context: Context) {
            val intent = Intent(context, Sample02Activity::class.java)
            ActivityCompat.startActivity(context, intent, null)
        }
    }

}

open(context) 是否导致这段代码出现内存泄漏?如果它确实做到了,它会像下面那样用弱引用修复吗?

class SampleActivity: BaseActivity() {

companion object {
    fun open(context: WeakReference(Context)) {
        context.get()?.let {
            val intent = Intent(it, Sample02Activity::class.java)
            ActivityCompat.startActivity(it, intent, null)
        }
    }
}

}

【问题讨论】:

  • 您不会在任何地方存储上下文链接,因此您的第一个变体是完全安全的
  • 您可以使用活动上下文,而不是传递。请说明您使用 open 方法的目的?
  • 我想用open方法打开新的Activity。
  • @AndreiTanana 那么这意味着如果我在伴生对象中使用上下文作为参数,它不会造成内存泄漏,直到我在伴生对象中使用 val ctx = context 之类的东西,对吧?
  • @HelloWorld 是的,完全正确

标签: android kotlin memory-leaks


【解决方案1】:

将上下文作为参数传递不会导致内存泄漏。方法返回后释放引用。

如果您将此上下文分配给伴随对象字段,可能会导致内存泄漏,但您永远不会这样做。

【讨论】:

    猜你喜欢
    • 2017-12-05
    • 1970-01-01
    • 2013-04-04
    • 2012-01-18
    • 2023-03-11
    • 1970-01-01
    • 2020-01-16
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多