如果我有如下方法:
public static void doSomething(Activity aActivity){
//do Something With The Activity
}
在内存使用方面,将活动/片段传递给静态方法是个坏主意吗?可以使用此方法在应用程序的生命周期内保留对活动的任何方法的引用吗?
如果我有这样的话:
public static void doSomething(View aView){
//do Something With The View
}
这会在应用程序的生命周期内保持对视图的引用吗?
这2个例子如果使用得足够,会导致内存泄漏或OOM问题吗?
答案 0 :(得分:2)
将Activity
或Context
作为参数传递给static
方法没有任何问题。只要您未在[{1}}变量中存储对Activity
或Context
的引用,就不存在内存泄漏!
即使你在static
变量中存储了一个引用,这也是一个很小的内存泄漏,因为下一次调用该方法会覆盖引用,从而释放以前存储的对象以进行潜在的垃圾回收。因此,没有机会逐渐消耗所有可用内存。
答案 1 :(得分:1)
调用静态方法并向其传递参数不会创建内存泄漏。
一般来说,将Activity
/ Context
/ View
存储到静态变量中是不好的做法(正如D. Wasser和其他所有人都告诉你的那样),但是:
Android Studio
会发出警告。避免这样,你会没事的。
另外,来自Android docs:
如果您不需要访问对象的字段,使您的方法保持静态。调用速度将提高约15%-20%。它也是良好做法,因为你可以从方法签名中看出调用方法不能改变对象的状态。
如果你有一个static
方法用于自定义(假设)你View
,我会考虑对给定的View
进行子类化并将其行为指定为私人会员职能。
答案 2 :(得分:-1)
将某些内容传递给静态函数并不是潜在的内存泄漏。将变量存储在静态变量中是。这种技术非常安全。我甚至推荐它,因为你可以将变量传递给函数并将它们存储在将要使用这些额外内容的类中的额外内容中,减少需要知道它们存在的位置的数量以及它们的存在方式#39;重新布局。
这
Passing a activity context into a static method, memory leak potential?