变量的生命周期:引用变为NULL

时间:2012-10-27 16:32:56

标签: java android singleton class-design lifetime

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

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

两个服务之间的通信与列表一起使用: 当具有传感器数据的新文件准备就绪(具有特定大小)时,文件的名称将附加到列表中。 如果新文件在列表中并上传它们,则Upload-Service将以无限循环方式进行检查。

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

列表在主要活动中定义:

private static LinkedBlockingDeque<String> mFileSendQueue;

并在主要活动的onCreate中初始化:

mFileSendQueue = new LinkedBlockingDeque<String>();

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

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

我知道Android可以关闭此活动,例如如果需要空间,但在我看来,只要至少有一个参考,就不应删除该列表。 有谁知道我的错误是什么?

感谢您阅读

1 个答案:

答案 0 :(得分:2)

我建议您的“发件人服务”自行记录。您可以按时间戳命名文件,发件人可以存储上载的上一个时间戳。

Android / dalvik vm似乎在后台一段时间后删除了引用。我已经看到它发生在我的服务中,突然硬件套接字为空等等。