活动之间共享的静态变量的生命周期是多少?

时间:2018-11-06 14:06:44

标签: java android android-lifecycle activity-lifecycle static-variables

我有一个 BaseActivity 和多个扩展它的 Activities

BaseActivity 有一个静态变量,这使它在后代 Activities 之间共享(它们都共享同一个实例)。

静态变量仅由 MainActivity (扩展了 BaseActivity )初始化。

MainActivity 明确注册了 BroadcastReceiver

BroadcastReceiver 更改静态变量中的值。

我想确定系统是否杀死了 MainActivity (例如,对于内存不足的情况),静态变量将被重置并设置为null。

正如我所说, MainActivity 与其他 Activities 共享静态变量,并且它仅拥有 BroadcastReceiver ,它是初始化静态变量的一个变量。 var。

没有 BroadcastReceiver ,静态变量数据将不可靠。

现在您已经掌握了整个方案。让我们来探讨以下问题:

在这种情况下,共享静态变量的生命周期是什么?

Android (在内存不足的情况下)会破坏单个活动还是会破坏我的整个应用程序(整个活动)?

  • 如果它完全破坏了我的应用并重置了可以接受的静态var,我担心它将单独破坏 MainActivity 并取消注册 BroadcastReceiver ,但它会保留静态var(这将变得不可靠)。

如果 Android 可以单独销毁 MainActivity 并保留静态变量,那么下次 MainActivity时我该如何得到通知或知道呢? em>开始,这样我就可以在静态var中重新加载值了吗?

对不起,我不能依靠 MainActivity 中的onDestroy()将静态var设置为null,因为您知道不能保证在 Android情况下会调用它破坏了内存不足的活动。

1 个答案:

答案 0 :(得分:2)

  

我想确定系统是否杀死了MainActivity(例如对于内存不足的情况),静态变量将被重置并设置为null。在这种情况下,共享静态var的生命周期是什么?

仅当扩展了null的所有其他活动都被杀死时,静态变量才会重置为BaseActivity(因为null已将其设置为!= MainActivity和/或BroadcastReceiver)。由于您的所有活动都扩展了BaseActivity,因此变量重置将在整个过程终止时发生。

  

Android(在内存不足的情况下)会破坏单个活动还是会破坏我的整个应用程序(整个活动)?

在这种情况下, Android 破坏了整个应用过程。

  

如果Android可以单独销毁MainActivity并保留静态变量,那么我如何获得通知或知道MainActivity下次启动,以便可以重新加载静态变量中的值?

使用SharedPreferences(如果适用)。