Java 当Android内存不足时,静态最终变量是否可能为null?

Java 当Android内存不足时,静态最终变量是否可能为null?,java,android,memory,static,final,Java,Android,Memory,Static,Final,我读到,当Android内存不足时,它会杀死后台的活动 当返回到应用程序时,Android将从最顶层的堆栈进行恢复,因此当该活动调用具有“static”的其他已终止活动时,它可能会返回null,因为它尚未恢复 问题是,静态最终变量怎么样?我的理解是,由于它是最终的,所以它不会被Android清空,并保持它的价值,即使Android杀死了持有它的活动 该用例仅供参考: 活动A: private static final String EXTRA_KEY = "key" void goToB(){

我读到,当Android内存不足时,它会杀死后台的活动

当返回到应用程序时,Android将从最顶层的堆栈进行恢复,因此当该活动调用具有“static”的其他已终止活动时,它可能会返回null,因为它尚未恢复

问题是,静态最终变量怎么样?我的理解是,由于它是最终的,所以它不会被Android清空,并保持它的价值,即使Android杀死了持有它的活动

该用例仅供参考:

活动A:

private static final String EXTRA_KEY = "key"

void goToB(){
    Intent intent = new Intent(this, B.class);
    intent.putExtra(EXTRA_KEY,"value");
}
活动B:

void getExtra(){
   getIntent.getExtras(A.EXTRA_KEY);
}
如果我在活动B上,将应用程序放在后台,Android会因为内存而停止活动,那么.EXTRA_键是否可能为空


这也是将额外_键用作常量的推荐方法吗?谢谢

静态变量与类绑定。而且类很少被垃圾收集。由于android可能会产生引用问题,因此通常避免使用静态变量

这里有一个保持恒定值的替代方法,如键、URL等

在你的应用程序gradle文件中

buildTypes {
    debug {
        buildConfigField "String", "EXTRA_KEY ", "\"key\""
    }
}
像那样检索它

BuildConfig.EXTRA_KEY 

安卓系统内存不足总是一件坏事。试着通读这篇文章:常量表达式是(/可能)由编译器内联的。所以您实际上没有使用
intent.putExtra(EXTRA_键,“value”)intent.putExtra(“key”,“value”)有一个传闻流传不衰:JVM在遇到内存压力时开始“清空”引用。这不是真的。发生的情况是,您的应用程序正在从头开始重新启动。Android将恢复部分活动堆栈。如果此时有任何引用为空,那是因为您的代码在应用程序的最新启动期间未能初始化它们。任何JVM都无法更改任何性质的最终引用。正如安迪·特纳所提到的,它甚至可能不作为一个独立的引用而存在;它可能是内联的。谢谢,如果它是内联的,或者是在编译时定义的,那么它可能是安全的。您共享的链接非常有用,谢谢!但由于我的额外_键不仅仅是一个,我认为放入BuildConfig会让它变得太混乱:(只要你只存储键,你就可以拥有一个带有常量值(键)的
公共静态
类。这是安全的