将活动或片段传递到静态方法是否不好



如果我有如下方法:

public static void doSomething(Activity aActivity){
//do Something With The Activity
}

就内存使用而言,将活动/片段传递到静态方法是一个坏主意吗?使用此方法是否可以在应用程序的生存期内保持对任何方法的引用处于活动状态?

如果我有这样的东西:

public static void doSomething(View aView){
//do Something With The View
}

这是否会使对视图的引用在应用程序的生存期内保持活动状态?

如果使用得足够多,这两个示例会导致内存泄漏或 OOM 问题吗?

ActivityContext作为参数传递给static方法并没有错。只要您不将ActivityContext的引用存储在static变量中,就不会有内存泄漏!

即使您确实将引用存储在static变量中,这也将是一个小的内存泄漏,因为对该方法的下一次调用将覆盖引用,从而释放以前存储的对象以进行潜在的垃圾回收。因此,随着时间的推移,不可能逐渐消耗所有可用内存。

调用静态方法并向其传递参数不会产生内存泄漏。

一般来说,将Activity/Context/View存储到静态变量中是一种不好的做法(正如D. Wasser和其他人告诉你的那样(,但是:

  • 甚至可以从成员方法存储静态变量
  • 无论如何,Android Studio都会发出警告。

避免这种情况,你会没事的。

另外,从安卓文档中:

如果不需要访问对象的字段,请将方法设置为静态。调用速度将提高约 15%-20%。这也是一种很好的做法,因为您可以从方法签名中看出调用该方法不能更改对象的状态。


如果您确实有一个用于自定义(假设(Views 的static方法,我会考虑对给定View进行子类化,并将其行为指定为私有成员函数。

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

将活动上下文传递到静态方法中,内存泄漏的可能性?

最新更新