gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:10:04 24 4
gpt4 key购买 nike

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

public static boolean apiLower11;

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

现在开始我的问题:

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

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

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

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

static block 内我不会遇到这个问题?

该值被分配一次,并且每次调用 Activity 的 onCreate 时我都会避免这种分配。

我认为作为替代方法,可以使用扩展 Application 的类并放置此变量,以便它在应用程序的整个生命周期中都应该处于 Activity 状态。

无论如何,我自己在这里看到的一个大错误是在 onCreate 方法而不是 static block 中为变量赋予值是错误的

最佳答案

如果静态变量没有被初始化,它将获得一个默认值(apiLower11将为false)。

所以

Suppose that one day you can open the application by starting another activity (via a notification?) without going through the main activity, what is the value of my static variable? The main activity has not been created then has not received any value right?

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

apiLower11 = !(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB);inside a static block i will not have this problem?

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

关于java - 从另一个 Activity 启动应用程序时的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com