0

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

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

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

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

该列表在 Main-Activity 中定义:

private static LinkedBlockingDeque<String> mFileSendQueue;

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

mFileSendQueue = new LinkedBlockingDeque<String>();

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

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

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

谢谢阅读

4

1 回答 1

2

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

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

于 2012-10-27T18:10:05.360 回答