Android 实例变量
Android Instance Variables
实例变量优先于局部变量还是相反?例如,使用 SharedPreferences
时,它应该在 class 的顶部声明然后在整个过程中引用,还是应该只在每个需要的方法中声明?
我想知道内存使用情况是否会有很大差异,因为实例变量的持续时间与 activity 一样长;但是,它会更干净,因为我不需要在使用它的每个方法中实例化它。
任何时候你都应该优先使用局部变量而不是 class-变量。
在不同的方法中有很多影响代码执行的实例变量会让你有很多状态。这使得对其进行推理变得非常困难,例如,当您试图在脑海中逐步执行某个函数以查找错误时。
我想更进一步,制作不操纵对象状态的方法 static
并将它们需要的所有内容作为参数传递。这样,您就可以完全脱离 class 上下文来查看此函数。 我的目标是 pure functions,这很容易推理。
如果有必要使其中一个函数变得不纯,这可能表明设计决策不当!
然而,在 class 级别 "cache" 有几件事是有意义的:
- 您的布局的观看次数。
findViewById()
的成本高得惊人,所以如果你有一个视图需要不止一种方法,你应该 "cache" 它。 ButterKnife 库让这一切变得非常简单。
- 数据库连接或任何需要大量成本的东西 opening/closing 它。 但是,不要将那些 "laying around" 保留在您的 Activity 中。将它们隐藏在 class 中并让 class 负责处理打开的资源。
一般来说:class-变量让你的class更有状态。这对于本质上是全状态的 classes 来说很好(例如 Activity
或 Fragment
),但是你应该尽量减少你必须担心的状态量。
这取决于您希望这些变量的用途。如果你想要一个在整个 class 中都需要的变量,你需要在 class 的顶部声明它,但是相反,如果你要声明的变量只是在一个方法上使用,你应该在这个方法中声明它。
我不能告诉你它使用的内存是多了还是少了(这些概念我真的不知道)但是我可以保证你的代码这样会更清晰。
我对此不太确定,但我认为每次声明一个变量都会消耗一些内存,因此,总而言之,如果您在每个方法中都有一个变量,它将消耗更多的内存而不是在 class 的顶部。如果知道这一点的人必须纠正我,请纠正我。
希望对您有所帮助!
这个问题似乎归结为 time/space 权衡,在这种情况下我会说答案取决于。我通常会默认赞成在对象构造时读取一次持久化对象,但尤其是在这样做会产生显着性能成本的情况下。但是,如果在内存中非常昂贵并且存储有问题的对象 space 成本过高,那么我会考虑根据需要阅读它。
实例变量优先于局部变量还是相反?例如,使用 SharedPreferences
时,它应该在 class 的顶部声明然后在整个过程中引用,还是应该只在每个需要的方法中声明?
我想知道内存使用情况是否会有很大差异,因为实例变量的持续时间与 activity 一样长;但是,它会更干净,因为我不需要在使用它的每个方法中实例化它。
任何时候你都应该优先使用局部变量而不是 class-变量。
在不同的方法中有很多影响代码执行的实例变量会让你有很多状态。这使得对其进行推理变得非常困难,例如,当您试图在脑海中逐步执行某个函数以查找错误时。
我想更进一步,制作不操纵对象状态的方法 static
并将它们需要的所有内容作为参数传递。这样,您就可以完全脱离 class 上下文来查看此函数。 我的目标是 pure functions,这很容易推理。
如果有必要使其中一个函数变得不纯,这可能表明设计决策不当!
然而,在 class 级别 "cache" 有几件事是有意义的:
- 您的布局的观看次数。
findViewById()
的成本高得惊人,所以如果你有一个视图需要不止一种方法,你应该 "cache" 它。 ButterKnife 库让这一切变得非常简单。 - 数据库连接或任何需要大量成本的东西 opening/closing 它。 但是,不要将那些 "laying around" 保留在您的 Activity 中。将它们隐藏在 class 中并让 class 负责处理打开的资源。
一般来说:class-变量让你的class更有状态。这对于本质上是全状态的 classes 来说很好(例如 Activity
或 Fragment
),但是你应该尽量减少你必须担心的状态量。
这取决于您希望这些变量的用途。如果你想要一个在整个 class 中都需要的变量,你需要在 class 的顶部声明它,但是相反,如果你要声明的变量只是在一个方法上使用,你应该在这个方法中声明它。
我不能告诉你它使用的内存是多了还是少了(这些概念我真的不知道)但是我可以保证你的代码这样会更清晰。
我对此不太确定,但我认为每次声明一个变量都会消耗一些内存,因此,总而言之,如果您在每个方法中都有一个变量,它将消耗更多的内存而不是在 class 的顶部。如果知道这一点的人必须纠正我,请纠正我。
希望对您有所帮助!
这个问题似乎归结为 time/space 权衡,在这种情况下我会说答案取决于。我通常会默认赞成在对象构造时读取一次持久化对象,但尤其是在这样做会产生显着性能成本的情况下。但是,如果在内存中非常昂贵并且存储有问题的对象 space 成本过高,那么我会考虑根据需要阅读它。