【问题标题】:static variables Vs application variables静态变量与应用程序变量
【发布时间】:2012-06-01 04:40:12
【问题描述】:

我只是想看看你们对 Android 开发的不同看法(在使用、效率甚至是良好实践方面)。

如果我在我的一个基本活动中使用静态变量(因此它的单个实例并且可以在任何地方访问),而不是在我的应用程序子类中使用非静态变量(这是所有活动的单个应用程序类) .

如果您尝试使用全局变量,两者将获得相同的最终结果。

我使用的是静态的,然后我转而使用应用程序子类(如果你们想知道“我在用它做什么”,我想播放背景音乐并从任何地方控制它,但我不希望出于某些原因使用服务)。

任何帮助澄清最好的方法?

【问题讨论】:

  • 我认为您可能想阅读stackoverflow.com/questions/2475978/… - 我认为它回答了您的问题。如果你只使用一个静态变量,它的开销可能比单例类要少,但实际上,在更大的范围内,它没有真正的区别,静态变量的存在是有原因的——如果谨慎使用它们不是坏习惯。
  • 谢谢,但这回答了我是否应该使用静态。我的问题是使用静态子类还是应用程序子类,两者都保存在内存中会有什么区别

标签: java android


【解决方案1】:

这也取决于使用情况,假设您正在使用

android:process

由于某种原因,在您的 Activity 或您的清单文件中的任何其他内容中,您的静态值将被重置,您将获得分配给静态变量的初始值。在这种情况下,您可以使用 SharedPreferenceApplication 类。

因为如果您将android:process 用于任何特定的 Activity,那么该 Activity 将在另一个进程中运行,而且我们知道在 Android 中每个应用程序都在其自己的进程中运行。

除此之外,我认为使用静态没有太多问题。但是,我个人更喜欢 Application 类,因为 Android 有它用于全局变量。

【讨论】:

  • 静态变量的life cycle是贯穿程序生命周期的,所以静态值永远不会被重置。
  • @Lucifer Android 在我们使用android:process 时会创建一个单独的进程,因此它将重置其值。
  • 同意 Dlavik 虚拟机为每个应用程序创建单独的进程。但我认为静态不会改变它在任何编程语言中的行为,因为它命名为 stats。你有与此相关的文档链接吗?
  • @Lucifer 在文档中可能没有提到,但你可以试试。
  • 这可能是android中静态变量的一个重要特性,奇怪的是文档中没有提到它。无论如何,感谢您提供这么好的信息:)
【解决方案2】:

在程序执行期间,每个变量都有自己的访问时间。这称为变量的生命周期。

  • 实例变量: 实例变量是类成员。每次从类创建对象时,都会为该对象创建这些实例变量的全新副本。实际上,从一个类创建一个对象,部分意味着为该对象创建实例变量的副本。因此,每个对象都有自己的实例变量副本,只要它们所属的对象存在,这些实例变量就存在。这些变量的值构成了我们所说的:对象的状态。

  • 静态变量: 静态变量也是类的成员,但不能属于从该类创建的任何对象。因此,从类中创建的对象不会获得自己的静态变量副本。因此,静态变量仅在运行时加载类时创建。静态变量的存在只依赖于类本身。因此,只要类存在,静态变量就存在。

这两个变量之间的主要区别之一是,当您调用System.gc(); 时,您的实例变量设置为空,而static variable will never set to null by calling gc

【讨论】:

  • 亲爱的路西法,你的信息更有用。如果您允许进入您的聊天室,我可以在您的聊天室中了解更多详细信息吗?
猜你喜欢
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2012-07-22
相关资源
最近更新 更多