【发布时间】: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