【发布时间】:2020-01-08 10:28:54
【问题描述】:
我读到,当 Android 内存不足时,它会杀死后台的活动。
返回应用程序时,Android会从栈顶恢复,所以当Activity调用其他有'static'的killed Activity时,它可能会返回null,因为它还没有恢复。
问题是,静态最终变量怎么样?我的理解是,由于它是最终的,它不会被 Android 清空并保持它的价值,即使 Android 杀死了持有它的 Activity。
用例仅供参考:
活动 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);
}
如果我在 Activity B 上,将应用程序置于后台,Android 会因为内存而终止 Activity,A.EXTRA_KEY 是否可能为空?
这也是使用 EXTRA_KEY 作为常量的推荐方法吗?谢谢
【问题讨论】:
-
在 Android 中内存不足总是一件坏事。尝试通读这篇文章:developer.android.com/topic/performance/memory
-
常量表达式由编译器(/可能)内联。所以你实际上并没有使用
intent.putExtra(EXTRA_KEY,"value");,你实际上(/也许)使用intent.putExtra("key","value"); -
有一个谣言在流传,它不会消失:JVM 在遇到内存压力时开始“清空”引用。这不是真的。正在发生的事情是,您的应用程序正在从头开始重新启动。 Android 将恢复部分 Activity 堆栈。如果此时任何引用为空,那是因为您的代码在应用程序的最新启动期间未能初始化它们。任何 JVM 都无法更改任何性质的最终引用。正如安迪·特纳(Andy Turner)所说,它甚至可能不作为离散参考存在;它可能是内联的。
-
感谢它是否在编译时内联或定义,而不是它可能是安全的
标签: java android memory static final