【问题标题】:How to use static variables efficiently?如何有效地使用静态变量?
【发布时间】:2013-07-17 08:29:40
【问题描述】:

我想知道一些基本的东西

我正在开发一个 android 应用程序,因此它导致我遇到内存管理问题。 最近看了一个google关于内存管理的视频,发现在activity中使用静态变量会导致内存泄漏,即使activity的方向改变,因为它保持对activity中其他对象的引用,视频中的人说使用借助静态方法的静态变量将解决问题,我想知道静态方法将如何解决问题?

我想知道在我的应用程序中使用静态变量的最佳方式,例如,我有一个全局类,其中存储了一些静态变量,因为它的名称表明这些值将由不同的活动评估和修改, 例如,我有一个静态变量 WIDTH,目前像这样更新它

Global.WIDTH = 12

或者像 int width = Global.WIDTH 来自不同的活动,这是一个正确的方法,还是我必须使用静态方法来获得宽度,如 int width = Global.getWidth();,那么这两者有什么区别,最好的方法是什么为此,

在处理静态变量时,我们还需要注意哪些其他重要事项?

谢谢大家,对冗长的描述感到抱歉...

【问题讨论】:

  • 当字段/方法必须属于类而不属于任何对象引用时使用static。如果在Activitys 中使用,我建议使用static final 将该字段声明为常量,而不是在那里使用普通的野生static 字段。
  • 感谢您的快速回复.. 我不能将其声明为最终版本,因为它的值会根据计算根据设备而变化
  • 您可以将其声明为static final 并在static{ } 方法中定义值。请注意,即使这些值是动态的,它们应该只在您的应用程序启动时加载一次,而不是在应用程序的任何时候加载。如果您希望横向可视化具有不同的宽度和高度,请再添加两个字段,而不是重新计算值。
  • 嗯.. 谢谢你这是个好主意。当我们直接从字段访问这些值并使用静态方法时,还有一件事在保留引用方面会有所不同
  • 任何static 字段将保留在内存中,直到类被卸载,所以我想说只将static 对象引用作为方法的局部变量或参数,不要使用它直接填写您的一个类的字段。

标签: java android performance static


【解决方案1】:

静态变量可能会导致内存泄漏,因为它们永远不会超出范围,但如果您只有几个原语,例如 int 或 long,那么您不会有问题。

如果您开始在静态变量中引用对象,尤其是集合,则需要小心。如果一个集合永远不会超出范围,那么其中包含的任何对象都不会超出范围,它们引用的任何对象也不会超出范围,因此集合有可能继续增长并耗尽更多内存。

你的问题中的变量,大概是一个 int,虽然可以。

【讨论】:

  • 谢谢Nick的回答,我以int为例,我想知道静态字段和静态方法的使用有什么区别
  • 我想不出使用静态方法对内存的任何影响。 Global.width 和 Global.getWidth() 之间的唯一区别是该方法将允许您在调用时计算值。方法中声明和使用的任何变量都不会导致内存泄漏,因为它们在方法结束后立即超出范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2020-03-31
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多