Android实例变量

时间:2015-06-05 20:01:34

标签: java android performance

实例变量是否优于局部变量,反之亦然?例如,使用SharedPreferences时,是应该在类的顶部声明然后引用它还是应该只在每个方法中声明它?

我想知道内存使用量是否会有很大差异,因为实例变量会持续与活动一样长;但是,它会更清晰,因为我不需要在它使用的每个方法中实例化它。

3 个答案:

答案 0 :(得分:3)

你应该优先选择局部变量而不是类变量

有很多实例变量会影响不同方法的代码执行,这会让你有很多状态。这使得很难对其进行推理,例如当你试图通过脑中的某个功能来查找错误时。

我喜欢通过制作不操纵对象状态static并将所需的所有内容作为参数传递的方法,更进一步。这样,您可以将此函数与类上下文完全隔离。 我的目标是以pure functions结束,这很容易理解。

如果有必要使其中一个功能不纯,那可能表明设计决策不佳!

但有一些事情在课堂上“缓存”它们是有道理的:

  • 您的布局视图。 findViewById()的成本非常高,所以如果你有一个只需要一个方法的视图,你应该“缓存”它。 ButterKnife库非常容易。
  • 数据库连接或实际上任何打开/关闭它的成本都很高的东西。 但是,请不要在您的活动中保留那些“存在”。将它们隐藏在一个类中,并使该类负责处理已打开的资源。

一般来说:类变量使你的类更有状态。这适用于本质上属于状态的类(例如ActivityFragment),但您应该尽量减少您需要担心的状态量。

答案 1 :(得分:1)

这个问题似乎归结为时间/空间的权衡,在这种情况下我会说答案取决于。在对象构建时,我通常默认支持读取持久化对象一次,但特别是在这样做时会有显着的性能成本。但是,如果在内存中溢价并且存储有问题的对象是空间成本过高,那么我会考虑根据需要阅读它。

答案 2 :(得分:0)

这取决于您对该变量的使用。如果你想要一个在整个类中需要的变量,你需要在类的顶部声明它,但相反,如果你要声明它的变量只是用在一个方法上,你应该在这个方法中声明它。

如果它使用更多内存或更少内存(我真的不知道这些概念),我无法告诉你,但我可以确保你的代码以这种方式更清晰。

我对此并不安全,但我认为每次声明变量都会消耗一些内存使用量,因此,如果每个方法中都有一个变量,它会消耗更多的内存使用量而不是在班级的顶部。如果知道这一点的人必须纠正我,请执行此操作。

我希望它会对你有所帮助!