相同活动中变量的静态引用

时间:2015-03-21 14:39:23

标签: android android-activity static

我有一个主要由viewpager组成的活动。用户可以使用不同的意图打开该活动的新版本,从而使视图页中的数据不同。问题是当我从主要活动类型访问其他类中的静态变量时,似乎它正在编辑活动的所有打开版本中的变量值。如果我完成()顶级活动,则原始活动中的数据已更改为子活动的数据。有什么方法可以仅使用当前活动来保持对静态变量的引用?

谢谢!

1 个答案:

答案 0 :(得分:0)

  

有什么方法可以仅使用当前活动来保持对静态变量的引用?

很简单 - 你不能。

在Java中,当您在类的主体中将变量声明为static时,它是一个'类变量'。这意味着该类的所有实例只在它们之间共享一个变量。因此(正如您已经发现的那样)更改类的任何实例中的值将更改所有实例的值,因为只有一个副本'变量。

Android中的一条黄金法则是从不在活动中使用static变量或方法。

这有两个原因 - 如果您的Activity仅在您的ouwn代码中进行了扩展,那么使用static变量或方法是毫无意义的(正如您已经发现的那样),它适得其反。

第二个原因是static通常与public修饰符一起使用,以便允许所有区域'访问变量和/或方法,无论是否存在任何给定类的实际实例 - 在类为Activity的情况下,这是一个非常危险的游戏因为活动的生命周期。

如果你有一个'基地' Activity你想要启动各种实例,但想要一个他们都需要访问的公共变量,然后简单地将其声明为......

protected Object myVariable;

...用你想要的任何类型的变量替换Object

每个Activity都会获得myVariable的自己的实例,并且可以在不影响同一Activity类的任何其他实例的情况下更改其值。

请参阅以下Java Class Variables