繁体   English   中英

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

[英]Static variables when the application is launched from another Activity

我对使用Activity中创建的静态变量的Android的行为有疑问。 我创建了一个静态布尔变量,如果正在运行的设备API <11,则为true;否则为false。

public static boolean apiLower11;

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

现在开始我的问题:

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

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

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

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

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

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

我认为使用扩展应用程序的类并放置此变量的替代方法是,它应在应用程序的整个生命周期中都保持活动状态。

无论如何,我自己可以在这里看到的最大错误是将值赋给onCreate方法中的变量而不是static块的错误

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

所以

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

答案是您的静态变量apiLower11为false。

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

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

您可以将其引入另一个类:

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

现在,您无需调用MainActivity.apiLower11进行检查,而是调用ApiLevel.isLowerThan11()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM