1

SMSを受信して​​特定の「作業」を開始するアプリがありますが、この作業はカメラとその他のサードパーティAPIを介して行われます。そのため、アプリに適切なSTARTメッセージ(SMS)を受信すると、作業を開始し、アプリがリモートデバイスからSTOPメッセージを受信するまで作業を続行します。

受信者はmanifest.xmlファイルに登録されており、それ以外の場合は正常に機能します。

問題は、STARTメッセージを受信するとアプリが正常に動作を開始することですが、しばらくしてSTOPメッセージを受信すると、カメラとサードパーティAPIの両方のハンドル/オブジェクト参照があるため、実際に動作を停止できません。 nullです。私はそれらのどちらも制御できません-そしてそれらをシングルトンにすることはできません。したがって、の2つの呼び出しの間でこれらのオブジェクト参照を永続化する必要があり、BroadcastReceiverこれを適切に行う方法を見つけることができません。今のところ、クラスのこれら2つの静的メンバーを作成したばかりで、正常に機能しますが、実際には良い解決策ではありません。この場合の状況を処理するための最良の方法は何ですか?onReceive()の複数の呼び出し間で初期化されたオブジェクトを使用するにはどうすればよいBroadcastReceiverですか?

ヘルプ/ポインタをいただければ幸いです。

TIA、-マニッシュ

4

2 に答える 2

1

そのクラスをシングルトンにすることはできませんが、通常のクラスを作成してシングルトンにすることはできます。そのクラスには HashMap があり、API とカメラ オブジェクトをキーと共に格納します。特定のタスクを停止する必要がある場合、いくつかのキーでそれを見つけ、そのオブジェクトで停止できます。

タスクストアを開始するときはそのオブジェクトをそのシングルトンに保存し、それを停止したいときはハッシュマップからそのオブジェクトを見つけてタスクを停止/破棄します。

シングルトン オブジェクト volatile を作成することをお勧めします。

private static volatile Utils _instance = null;


public static Utils Instance() {
    if (_instance == null) {
        synchronized (Utils.class) {
            _instance = new Utils();
        }
    }
    return _instance;
}
于 2012-06-12T10:37:43.960 に答える
0

ApplicationClassクラスから拡張されたクラスにオブジェクト参照を追加することもできますApplicationActivityアプリケーション クラスは、またはServiceが実行されるまでメモリ内に保持されます。結局殺されるだけActivityですService

これは Static フィールドよりも優れたアプローチだと思います。しかし、これもFull-Proofではありません。私もこの問題を探しています。

于 2012-06-12T10:27:43.110 に答える