一个静态变量在多个Activity之间共享的生命周期是什么?

3

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

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

静态变量仅由扩展BaseActivityMainActivity初始化。

MainActivity明确注册了一个BroadcastReceiver

BroadcastReceiver更改静态变量中的值。

我想确保如果系统杀死MainActivity(例如,出于低内存原因),则静态变量将被重置并设置为null。

正如我所说,MainActivity与其他Activities共享静态变量,并且它独占BroadcastReceiver,并且是初始化静态变量的唯一对象。

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

现在你已经了解了整个情况。让我们进入问题:

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

Android(在低内存的情况下)是销毁单个activity还是销毁整个应用程序(所有activities)?

  • 如果它完全销毁我的应用程序并重置静态变量,那将是可以接受的,我担心它仅销毁MainActivity并注销BroadcastReceiver,但仍保留静态变量(这将变得不可靠)。

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

很抱歉,我不能依靠MainActivity中的onDestroy()将静态变量设置为null,因为您知道在低内存情况下,无法保证调用它。

1个回答

2
我想确保如果系统杀死了MainActivity(例如由于低内存),静态变量将被重置并设置为null。在这种情况下,共享静态变量的生命周期是什么?只有当继承BaseActivity的所有其他Activity都被销毁时(因为它已经被MainActivity和/或BroadcastReceiver设置为!= null),静态变量才会被重置为null。由于您的所有活动都扩展了BaseActivity,因此变量重置将在整个进程终止时发生。
Android在低内存情况下会摧毁整个应用程序进程。
如果Android可以单独销毁MainActivity并保留静态变量,那么下次MainActivity启动时我该如何得到通知或意识到这一点,以便重新加载静态变量中的值?如果适用,请使用SharedPreferences。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接