0

変数の寿命に関して問題があります。

私の Android アプリは、センサー データをファイルに書き込み、このファイルをサーバーに送信する必要があります。このために、Activity (Main-Activity) と 2 つの Service を作成しました。1 つはセンサー データをファイルに書き込むためのもの (Sensor-Service) で、もう 1 つはファイルをサーバーに送信するためのもの (アップロード サービス) です。アクティビティには、2 つのサービスを個別に開始/停止するための 2 つのトグル ボタンがあります。

2 つのサービス間の通信はリストを使用して行われます。センサー データを含む新しいファイルの準備が整うと (特定のサイズを持つ)、ファイルの名前がリストに追加されます。Upload-Service は、新しいファイルがリストにあるかどうかを無限ループでチェックして、それらをアップロードします。

しかし、このリストは問題を引き起こします: アプリがバックグラウンドで実行され、ある時点で他の多くのアプリを開くと、リストの参照が Sensor-Service (およびおそらく Upload-Service) で NULL になります。

リストは Main-Activity で定義されています。

private static LinkedBlockingDeque<String> mFileSendQueue;

Main-Activity の onCreate で初期化されます。

mFileSendQueue = new LinkedBlockingDeque<String>();

静的メソッド setQueue を介して 2 つのサービスに渡されます (両方のサービスにそのようなメソッドが含まれています)。

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

スペースが必要な場合など、アクティビティが Android によって閉じられる可能性があることはわかっていますが、少なくとも 1 つの参照がある限り、リストを削除しないでください。誰かが私の間違いを知っていますか?

読んでくれてありがとう

4

1 に答える 1

2

「送信者サービス」自体が記録を保持することをお勧めします。タイムスタンプでファイルに名前を付けることができ、送信者はアップロードされた最後のタイムスタンプを保存します。

Android / dalvik vm は、バックグラウンドでしばらくすると参照を削除するようです。私のサービスでそれが起こるのを見てきました.突然ハードウェアソケットがnullになるなど.

于 2012-10-27T18:10:05.360 に答える