![](/img/trans.png)
[英]Application Crashes when an Activity that Extends ListView is 'Launched'
[英]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.