Java 全局对象(基于“扩展应用程序”)一夜之间蒸发。。为什么?

Java 全局对象(基于“扩展应用程序”)一夜之间蒸发。。为什么?,java,android,json,garbage-collection,Java,Android,Json,Garbage Collection,我有一个android应用程序,在那里我扩展了应用程序对象 public class Globals extends Application { private Map<String, Object> Creators = new LinkedHashMap<>(); } public类Globals扩展应用程序{ 私有映射创建者=新建LinkedHashMap(); } Globals中有各种各样的东西。通常是事物的HashMaps——我将其用作全局j

我有一个android应用程序,在那里我扩展了应用程序对象

public class Globals extends Application {
    private Map<String, Object> Creators = new LinkedHashMap<>();   
}
public类Globals扩展应用程序{
私有映射创建者=新建LinkedHashMap();
}
Globals
中有各种各样的东西。通常是事物的HashMaps——我将其用作
全局json缓存,其中每个
上下文都有一个实例。现在一夜之间,
应用程序
对象有时可能是空的。i、 e.我使用该应用程序,然后去睡觉,早上回去测试,所有json缓存都是空的。但用户仍在“登录”。我认为这是因为操作系统上的垃圾收集

现在。我可以只刷新
json缓存
,或者在
json缓存
为空时强制“注销”,但有一个问题-它可能为空,因为服务器没有合法的json。i、 “空着”不是去买更多的理由。我需要做的是检测安卓何时将缓存夷为平地,或者至少知道安卓保留
应用程序
扩展的最短时间

它会将所有内容设置为
null

有人有什么想法吗?请记住,上下文将在
onCreate
中的上下文中重新初始化
应用程序的null HashMap成员(由于超出范围的原因,这是必需的),因为我声明了
新的
,但简单地测试“null”并不是一个真正的选项。我想只在
json-gather
上更改空null是可以的,但我需要知道这会起作用,否则我会浪费一天的时间(即很难测试)

现在一夜之间,应用程序对象有时可能是空的。i、 e.我使用该应用程序,然后去睡觉,早上回去测试,所有json缓存都是空的

您的进程很可能已终止。见和

我需要做的是检测安卓何时将缓存夷为平地

流程终止时不会通知您

或者至少知道Android保留应用程序扩展的最短时间

您的进程可以在离开前台几毫秒后终止

[
应用程序
可以作为数据存储

仅适用于可以轻松从持久数据存储重新加载的数据

[
应用程序
]适用于多线程

仅当您添加自己的线程同步逻辑时。
应用程序
上的属性和函数并没有什么神奇之处可以使它们成为线程安全的

在没有地方存储可变数据的地方,这是最好的选择

您希望保留的任何数据都应存储在磁盘(数据库、
SharedReferences
或其他类型的文件)或服务器上

因此,我的问题仍然是如何缓解它

您希望保留的任何数据都应存储在磁盘(数据库、
SharedReferences
或其他类型的文件)或服务器上。将内存缓存用作缓存

因为像SQLite这样的东西是无用的,它们不是线程安全的

如果在操作中使用相同的
SQLiteDatabase
实例,则SQLite是线程安全的

有效地使任何事情都无法并行运行

如果您觉得SQLite令人讨厌,当然欢迎您使用其他持久数据存储

现在一夜之间,应用程序对象有时可能是空的。i、 e.我使用该应用程序,然后去睡觉,早上回去测试,所有json缓存都是空的

您的进程很可能已终止。见和

我需要做的是检测安卓何时将缓存夷为平地

流程终止时不会通知您

或者至少知道Android保留应用程序扩展的最短时间

您的进程可以在离开前台几毫秒后终止

[
应用程序
可以作为数据存储

仅适用于可以轻松从持久数据存储重新加载的数据

[
应用程序
]适用于多线程

仅当您添加自己的线程同步逻辑时。
应用程序
上的属性和函数并没有什么神奇之处可以使它们成为线程安全的

在没有地方存储可变数据的地方,这是最好的选择

您希望保留的任何数据都应存储在磁盘(数据库、
SharedReferences
或其他类型的文件)或服务器上

因此,我的问题仍然是如何缓解它

您希望保留的任何数据都应存储在磁盘(数据库、
SharedReferences
或其他类型的文件)或服务器上。将内存缓存用作缓存

因为像SQLite这样的东西是无用的,它们不是线程安全的

如果在操作中使用相同的
SQLiteDatabase
实例,则SQLite是线程安全的

有效地使任何事情都无法并行运行

如果您觉得SQLite令人讨厌,当然欢迎您使用其他持久数据存储