从另一个Activity启动应用程序时的静态变量

时间:2014-03-04 02:02:19

标签: java android

我怀疑Android在Activity中创建的静态变量的行为。我创建了一个 static 布尔变量,如果正在运行的设备API是< 11如果没有,则为假。

public static boolean apiLower11;

我在我的onCreate public static boolean apiLower11 = !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB);(我刚才没想直接MainActivity)中为我分配一个值,这是我的应用程序启动的活动。此变量也用于其他活动(这是重要的部分)。

现在开始我的问题:

假设有一天您可以通过启动另一个活动(通过通知?)而不通过主要活动来打开应用程序,我的静态变量的值是多少?主要活动尚未创建,那么没有收到任何价值吗?

如果在用户浏览我的应用程序时销毁主活动怎么办(我知道,Android会杀死其他进程而不是用户正在使用的进程......)但这种情况是否可能?我的静态变量会发生什么?

据我所知:静态变量是在加载类时创建的,因此在类加载器处于活动状态之前它将保持活动状态。如果我把

apiLower11 = !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB);

static区块内我不会有这个问题吗?

值被分配一次,每次调用活动的onCreate时我都会避免这个赋值。

我认为使用扩展Application的类并将此变量放在应用程序的整个生命周期中它应该是活动的替代方法。

无论如何,我自己在这里看到的一个大错误就是在onCreate方法而不是static阻止

中给变量赋值是错误的。

2 个答案:

答案 0 :(得分:2)

如果静态变量尚未初始化,则会获得默认值(apiLower11将为false)。

所以

  

假设有一天您可以通过启动另一个活动(通过通知?)而不通过主要活动来打开应用程序,我的静态变量的值是多少?主要活动尚未创建,那么没有收到任何价值吗?

答案是你的静态变量apiLower11是假的。

  

apiLower11 =!(Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB);在静态块内我不会有这个问题吗?

答案是肯定的,你可以这样做,因为静态块将在ClassLoader加载MainActivity.class之后执行

答案 1 :(得分:1)

你可以把它拉到另一个班级:

public class ApiLevel {
    public static boolean isLowerThan11() {
         return Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB;
    }
}

现在,您无需在需要检查时致电MainActivity.apiLower11,而是致电ApiLevel.isLowerThan11()