【问题标题】:What is the lifecycle of a static variable shared between Activities?活动之间共享的静态变量的生命周期是什么?
【发布时间】:2019-04-09 22:38:18
【问题描述】:

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

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

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

MainActivity 显式注册了一个 BroadcastReceiver

BroadcastReceiver 改变静态变量中的值。

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

正如我所说,MainActivity 与其他 Activity 共享静态变量,并且它完全拥有 BroadcastReceiver 并且它是初始化静态变量的人变量。

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

现在你有了整个场景。让我们进入问题:

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

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

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

如果 Android 可以单独销毁 MainActivity 并保留静态 var,我如何才能在下次 MainActivity em> 启动,以便我可以重新加载静态变量中的值?

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    如果 Android 可以单独销毁 MainActivity 并保留静态 var,我如何在下次 MainActivity 启动时收到通知或知道这一点,以便我可以重新加载静态 var 中的值?

    如果适用,请使用SharedPreferences

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多