java - 变量的生命周期 : Reference becomes NULL

标签 java android singleton class-design lifetime

我对变量的生命周期有疑问。

我的 Android 应用程序应将传感器数据写入文件并将该文件发送到服务器。为此,我创建了一个 Activity (主 Activity )和两个服务。一种用于将传感器数据写入文件(传感器服务),另一种用于将文件发送到服务器(上传服务)。该 Activity 有两个切换按钮,用于分别启动/停止这两个服务。

两个服务之间的通信通过列表进行: 当带有传感器数据的新文件准备好(具有特定大小)时,文件名将附加到列表中。 上传服务无限循环检查列表中是否有新文件并上传它们。

但是这个列表会导致一个问题: 当我的应用程序在后台运行并且我在某个时候打开许多其他应用程序时,列表上的引用在传感器服务中变为 NULL(也可能在上传服务中)。

该列表在 Main-Activity 中定义:

private static LinkedBlockingDeque<String> mFileSendQueue;

并在Main-Activity的onCreate中初始化:

mFileSendQueue = new LinkedBlockingDeque<String>();

并通过静态方法setQueue传递给两个服务(两个服务都包含这样的方法):

public static void setQueue(LinkedBlockingDeque<String> queue) {
    mFileSendQueue = queue;
}

我知道 Android 可以关闭 Activity,例如如果需要空间,但在我看来,只要至少有一个引用,就不应该删除该列表。 有人知道我的错误是什么吗?

感谢您的阅读

最佳答案

我建议您的“发件人服务”自行保存记录。您可以按时间戳命名文件,发件人会存储最后上传的时间戳。

Android/dalvik vm 似乎会在后台一段时间后删除引用。我在我的服务中看到过这种情况,突然硬件套接字为空等。

关于java - 变量的生命周期 : Reference becomes NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102008/

相关文章:

java - 无守护程序关系数据库管理系统

java - 非Web应用服务器 "framework"

java - Android 10 设备不开始发现 wifi direct

Swift - 尝试访问 Singleton 对象时出现问题

ruby - Ruby 类变量不好吗?

java - java返回类型可以像Scala那样写 this.type

java - 无法绑定(bind) ConnectionPoolDataSource 实例

java - android.os.Process.killProcess(android.os.Process.myPid()) 中的错误;

android - 如何绕过 Firebase 缓存来刷新数据(在 Android 应用中)?

objective-c - 对每个对象而不对每个类使用dispatch_once_t