【问题标题】:Passing a activity context into a static method, memory leak potential?将活动上下文传递给静态方法,内存泄漏的可能性?
【发布时间】:2017-09-14 18:35:57
【问题描述】:

我已经看到了这种用于启动活动的特殊技术,在我看来,由于静态上下文,这不是一个好主意,但我希望有人可能有这种方法背后的正当理由。

您要启动的活动实现了一个静态启动(上下文上下文)方法,该方法设置了意图、标志等,并最终启动了活动。

public static void launch(Context context){
   Intent i = new Intent(context, SomeOtherActivity.class);
   // flag stuff
   context.startActivity(i);
}

然后,DifferentActivity 可以用一行来启动 SomeOtherActivity。

SomeOtherActivity.launch(DifferentActivity.this);

我喜欢它允许您将活动中的标志设置为远离启动它的 DifferentActivity 的方式,但这似乎不足以合理地将活动的上下文传递给静态方法。

这会不会导致 DifferentActivity 不被垃圾收集,因为现在该静态方法具有对它的引用?这对我来说似乎是一个内存泄漏,并且仅仅为了能够保留正在创建的活动中包含的标志可能不是一个好主意。

这里有什么我遗漏的东西使这是一个很好的做法吗?

【问题讨论】:

  • 没有。 static fields 是个问题。 static 方法不是。

标签: android android-activity memory-leaks android-context


【解决方案1】:

将某些内容传递给静态函数并不是潜在的内存泄漏。将变量存储在静态变量中。这种技术是完全安全的。我什至推荐它,因为您可以将变量传递给函数并将它们存储在将使用这些附加功能的类中的附加功能中,从而减少需要了解它们的存在以及它们如何的地方的数量布局

【讨论】:

  • 好吧,我感觉我分析错了。我认为由于该方法是静态的,因此即使在该代码块之后,传入的参数也会持续存在。太棒了,谢谢,那么这似乎是一个很好的分离问题的方法!谢谢!
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
相关资源
最近更新 更多