是否在多个app实例之间保留了静态变量?

时间:2015-03-18 15:41:14

标签: java android

我刚刚发现了我对Android / Java理解的明显差距。特别是,出现,我的应用程序的不同调用之间保留了静态类变量。

这是预期的吗?

我仔细搜索了StackOverflow和其他地方,但我没有提到这一点。作为一项实验,我在我的初始活动中尝试了以下代码:

static int MyCount;
...
public void onCreate(Bundle savedInstanceState) {
Log.d( "MYAPP", "MyCount="+MyCount );
MyCount++;
...

如果我退出应用程序(通过finish())并重新启动它,MyCount会不断增加。这让我感到惊讶。这是预期的行为吗? (并且,请不要讲述静态变量的邪恶:)

3 个答案:

答案 0 :(得分:2)

  

不,多个应用实例之间不会保留静态变量。

这很可能是因为您没有完全关闭您的应用(通过设置 - >停止进程或类似方法),而是您的应用只是在后台运行并保留静态变量的值。

答案 1 :(得分:2)

  

这是预期的吗?。

这完全取决于你对我的应用程序的调用的意思"。

假设您有一个单活动应用程序。然后,您手动执行以下伪代码:

for
  click on app's icon in home screen launcher
  click BACK to destroy that activity and return to the home screen launcher
while not tired of doing this yet

假设循环处理没有明显延迟,您将为整个循环维护一个进程,因此您的静态数据成员仍然存在。

静态数据成员的生命周期是Java进程的生命周期,you do not control when your process goes away

答案 2 :(得分:0)

静态的生命周期仅限于与加载该类的第一个实例的特定类加载器关联的JVM的生命周期。

所以不,它不会在不同的进程中共享。

值得指出的是int是Java中的 atomic 类型,但long可能不是。在考虑onCreate的线程安全性时,请记住这一点。