java - Activity 之间共享的静态变量的生命周期是什么?

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

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

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

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

MainActivity 显式注册一个 BroadcastReceiver

BroadcastReceiver 更改静态变量中的值。

我想确定如果系统终止了 MainActivity(例如,对于低内存),静态变量将被重置并设置为 null。

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

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

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

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

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

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

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

对不起,我不能依赖onDestroy()MainActivity 中将静态变量设置为 null,如您所知,如果 Android 破坏内存不足的 Activity,则不能保证调用它。

最佳答案

I want to make sure if the System killed MainActivity (For low memory for example), the static variable will be reset and set to null. What is the lifecycle of the shared static var in this case?

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

Does Android (In case of low memory) destroys individual activities or does it destroy my whole app (Whole activities)?

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

If Android could destroy MainActivity alone and keep the static var, how could I get notified or be aware of that next time MainActivity starts so I can reload the values inside the static var?

使用SharedPreferences如果适用。

关于java - Activity 之间共享的静态变量的生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53173547/

相关文章:

java - 这个 Java EnumSet 初始化构造如何工作?

java - Apache Tomcat 配置 : Access not authorized

android - 更改 Android 上的导航栏图标颜色

android - 在 FragmentTransaction.replace() 后跟后退按钮后不会重新创建 ViewPager fragment

android - onCreate() 使用 onBackPressed 调用,但不是通过按下后退按钮调用

java - 是否可以使用所有 Fragments 创建应用程序?

java - UTC 中的字符串正在转换为 EST Instant

android - 在应用程序崩溃android时生成日志文件

java - 如何从另一种方法停止/中断正在运行的线程?

android - 传递结果失败 ResultInfo | java.lang.IllegalStateException : Can not perform this action after onSaveInstanceState 错误