2012-06-01 51 views
0

我只是想看看你们可能会认为差(在使用,效率,甚至是很好的做法而言)关于Android开发。Vs的应用程序变量静态变量

如果我在我的一个基本活动中使用了一个静态变量(因此它的单个实例和访问无处不在),而不是在我的应用程序子类中使用非静态变量(这是所有活动的单个应用程序类)。

两个如果您尝试使用全局变量会达到同样的最终结果。

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

任何帮助澄清的最佳方式?

+0

我想你可能需要阅读http://stackoverflow.com/questions/2475978/using-static-variables-in-android - 它回答你的问题在我看来。如果你只使用一个静态变量,它可能比单例类的开销小,但实际上,在更大的范围内,它并没有真正的区别,静态变量的存在是有原因的 - 如果谨慎使用它们并不是坏习惯。 – Ewald

+0

谢谢,但这回答我是否应该使用静态或不。我的问题是使用静态还是应用程序子类,以及将两者保存在内存中的区别是什么 – Snake

回答

3

这取决于使用也想,如果你正在使用

android:process 

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

因为如果你使用android:process针对任何特定的活动则该活动将在另一个进程中运行,因为我们知道,在Android的每个应用程序在其自身的进程运行。

比这个我没有看到有使用静态太大问题

其他。但是,我个人更喜欢Application类,因为Android具有全局变量。

+0

[生命周期](http://www.javaying.com/2007/01/whats-lifetime-of- variables.html)是通过程序的生命周期,所以静态值永远不会被重置。 – Lucifer

+1

@Lucifer Android在我们使用'android:process'的时候会创建一个独立的进程,所以它会重置它的值。 –

+0

同意Dlavik虚拟机为每个应用程序创建分离进程。但我不认为静态在任何编程语言中改变其行为,因为它命名统计。你有没有与此相关的任何文档链接? – Lucifer

1

一个程序的执行过程中,每个变量具有它自己的时间内,它可以被访问。这被称为变量的生命周期。

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

  • 静态变量: 静态变量也是一个类的成员,但不能属于该类创建任何对象。所以从类创建的对象不会获得自己的静态变量副本。因此,只有在运行时加载类时才会创建静态变量。静态变量的存在仅取决于类本身。结果,只要其类存在,就存在一个静态变量。

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

+0

确认您的信息更有用亲爱的Lucifer。如果您允许进入聊天室,我可以在聊天室中了解更多详情吗? –